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/05/16 23:57:32 UTC
(hbase-site) branch asf-site updated: Published site at e45818ee9aeb2c8fb1be72ecf17a5d8584011147.
This is an automated email from the ASF dual-hosted git repository.
asf-gitbox-commits 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 17e7b54da79 Published site at e45818ee9aeb2c8fb1be72ecf17a5d8584011147.
17e7b54da79 is described below
commit 17e7b54da79b8c600a2b5b40ecfdc22bfefb5311
Author: HBase <de...@hbase.apache.org>
AuthorDate: Sat May 16 23:54:11 2026 +0000
Published site at e45818ee9aeb2c8fb1be72ecf17a5d8584011147.
---
__spa-fallback.html | 4 +-
acid-semantics/index.html | 4 +-
apidocs/index-all.html | 34 +
apidocs/member-search-index.js | 2 +-
.../org/apache/hadoop/hbase/class-use/Cell.html | 262 +-
.../hadoop/hbase/filter/ColumnPrefixFilter.html | 36 +-
.../hadoop/hbase/filter/ColumnRangeFilter.html | 42 +-
.../hadoop/hbase/filter/Filter.ReturnCode.html | 216 +-
.../org/apache/hadoop/hbase/filter/Filter.html | 216 +-
.../hadoop/hbase/filter/FilterList.Operator.html | 58 +-
.../org/apache/hadoop/hbase/filter/FilterList.html | 58 +-
.../hadoop/hbase/filter/FilterListWithAND.html | 692 ++--
.../hadoop/hbase/filter/FilterListWithOR.html | 88 +-
.../hbase/filter/MultipleColumnPrefixFilter.html | 117 +-
.../org/apache/hadoop/hbase/filter/SkipFilter.html | 28 +-
.../hadoop/hbase/filter/WhileMatchFilter.html | 28 +-
books/apache-hbase-reference-guide-dark-mode.pdf | Bin 38899979 -> 38899979 bytes
books/apache-hbase-reference-guide.pdf | Bin 38790049 -> 38790045 bytes
checkstyle-aggregate.html | 278 +-
code-of-conduct/index.html | 4 +-
dependency-convergence.html | 2 +-
dependency-info.html | 2 +-
dependency-management.html | 2 +-
devapidocs/index-all.html | 38 +
devapidocs/member-search-index.js | 2 +-
.../org/apache/hadoop/hbase/class-use/Cell.html | 284 +-
.../hadoop/hbase/filter/ColumnPrefixFilter.html | 96 +-
.../hadoop/hbase/filter/ColumnRangeFilter.html | 106 +-
.../org/apache/hadoop/hbase/filter/Filter.html | 34 +-
.../org/apache/hadoop/hbase/filter/FilterBase.html | 18 +-
.../org/apache/hadoop/hbase/filter/FilterList.html | 152 +-
.../hadoop/hbase/filter/FilterListWithAND.html | 124 +-
.../hadoop/hbase/filter/FilterListWithOR.html | 73 +-
.../apache/hadoop/hbase/filter/FilterWrapper.html | 18 +-
.../hbase/filter/MultipleColumnPrefixFilter.html | 106 +-
.../org/apache/hadoop/hbase/filter/SkipFilter.html | 140 +-
.../hadoop/hbase/filter/WhileMatchFilter.html | 140 +-
.../hadoop/hbase/filter/ColumnPrefixFilter.html | 36 +-
.../hadoop/hbase/filter/ColumnRangeFilter.html | 42 +-
.../hadoop/hbase/filter/Filter.ReturnCode.html | 216 +-
.../org/apache/hadoop/hbase/filter/Filter.html | 216 +-
.../hadoop/hbase/filter/FilterList.Operator.html | 58 +-
.../org/apache/hadoop/hbase/filter/FilterList.html | 58 +-
.../hadoop/hbase/filter/FilterListWithAND.html | 692 ++--
.../hadoop/hbase/filter/FilterListWithOR.html | 88 +-
.../hbase/filter/MultipleColumnPrefixFilter.html | 117 +-
.../org/apache/hadoop/hbase/filter/SkipFilter.html | 28 +-
.../hadoop/hbase/filter/WhileMatchFilter.html | 28 +-
docs/acl-matrix/index.html | 6 +-
docs/amv2/index.html | 6 +-
docs/architecture/bulk-loading/index.html | 6 +-
docs/architecture/catalog-tables/index.html | 6 +-
.../architecture/client-request-filters/index.html | 6 +-
docs/architecture/client/index.html | 6 +-
docs/architecture/hbase-mob/index.html | 6 +-
docs/architecture/hdfs/index.html | 6 +-
docs/architecture/index.html | 6 +-
docs/architecture/master/index.html | 6 +-
docs/architecture/overview/index.html | 6 +-
docs/architecture/regions/index.html | 6 +-
docs/architecture/regionserver/index.html | 6 +-
docs/architecture/snapshot-scanner/index.html | 6 +-
.../timeline-consistent-reads/index.html | 6 +-
docs/asf/index.html | 6 +-
docs/backup-restore/additional-topics/index.html | 6 +-
docs/backup-restore/administration/index.html | 6 +-
docs/backup-restore/commands/index.html | 6 +-
docs/backup-restore/index.html | 6 +-
docs/backup-restore/overview/index.html | 6 +-
docs/building-and-developing/announcing/index.html | 6 +-
docs/building-and-developing/building/index.html | 6 +-
.../developer-guidelines/index.html | 6 +-
.../generating-documentation/index.html | 6 +-
.../getting-involved/index.html | 6 +-
docs/building-and-developing/ides/index.html | 6 +-
docs/building-and-developing/index.html | 6 +-
docs/building-and-developing/releasing/index.html | 6 +-
.../repositories/index.html | 6 +-
docs/building-and-developing/tests/index.html | 6 +-
.../updating-landing/index.html | 6 +-
docs/building-and-developing/voting/index.html | 6 +-
docs/bulk-data-generator-tool/index.html | 6 +-
docs/case-studies/index.html | 6 +-
docs/community/index.html | 6 +-
docs/compression/index.html | 6 +-
docs/configuration/basic-prerequisites/index.html | 6 +-
docs/configuration/confirm/index.html | 6 +-
docs/configuration/default/index.html | 6 +-
docs/configuration/dynamic/index.html | 6 +-
docs/configuration/example/index.html | 6 +-
docs/configuration/hbase-run-models/index.html | 6 +-
docs/configuration/important/index.html | 6 +-
docs/configuration/index.html | 6 +-
docs/contributing-to-documentation/index.html | 6 +-
docs/cp/index.html | 6 +-
docs/datamodel/index.html | 6 +-
docs/external-apis/index.html | 6 +-
docs/faq/index.html | 6 +-
docs/getting-started/index.html | 6 +-
docs/hbase-apis/index.html | 6 +-
docs/hbase-history/index.html | 6 +-
docs/hbase-incompatibilities/index.html | 6 +-
docs/hbtop/index.html | 6 +-
docs/hfile-format/index.html | 6 +-
docs/index.html | 6 +-
docs/inmemory-compaction/index.html | 6 +-
docs/mapreduce/index.html | 6 +-
docs/offheap-read-write/index.html | 6 +-
.../backup-and-snapshots/index.html | 6 +-
.../cluster-replication/index.html | 6 +-
docs/operational-management/index.html | 6 +-
.../metrics-and-monitoring/index.html | 6 +-
docs/operational-management/node/index.html | 6 +-
.../region-and-capacity/index.html | 6 +-
.../index.html | 6 +-
.../operational-management/table-rename/index.html | 6 +-
docs/operational-management/tools/index.html | 6 +-
docs/orca/index.html | 6 +-
docs/other-info/index.html | 6 +-
docs/performance/index.html | 6 +-
docs/profiler/index.html | 6 +-
docs/protobuf/index.html | 6 +-
docs/pv2/index.html | 6 +-
docs/regionserver-sizing/index.html | 6 +-
docs/rpc/index.html | 6 +-
docs/schema-design/index.html | 6 +-
docs/security/client-access/index.html | 6 +-
docs/security/data-access/index.html | 6 +-
docs/security/example/index.html | 6 +-
docs/security/hdfs-and-zookeeper-access/index.html | 6 +-
docs/security/index.html | 6 +-
docs/security/tls/index.html | 6 +-
docs/security/user-access/index.html | 6 +-
docs/security/web-ui/index.html | 6 +-
docs/shell/index.html | 6 +-
docs/single-page/index.html | 6 +-
docs/spark/index.html | 6 +-
docs/sql/index.html | 6 +-
docs/store-file-tracking/index.html | 6 +-
docs/sync-replication/index.html | 6 +-
docs/thrift-filter-language/index.html | 6 +-
docs/tracing/index.html | 6 +-
docs/troubleshooting/index.html | 6 +-
docs/unit-testing/index.html | 6 +-
docs/upgrading/index.html | 6 +-
docs/upgrading/paths/index.html | 6 +-
docs/upgrading/rollback/index.html | 6 +-
docs/upgrading/rolling/index.html | 6 +-
docs/upgrading/version-number/index.html | 6 +-
docs/ycsb/index.html | 6 +-
docs/zookeeper/index.html | 6 +-
downloads/index.html | 4 +-
export-control/index.html | 4 +-
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 +-
index.html | 4 +-
issue-management.html | 2 +-
licenses.html | 2 +-
mailing-lists.html | 2 +-
mailing-lists/index.html | 4 +-
news/index.html | 4 +-
other-resources/index.html | 4 +-
plugin-management.html | 2 +-
plugins.html | 2 +-
powered-by-hbase/index.html | 4 +-
project-info.html | 2 +-
project-reports.html | 2 +-
scm.html | 2 +-
security-model/index.html | 4 +-
source-repository/index.html | 4 +-
sponsors/index.html | 4 +-
summary.html | 2 +-
team.html | 2 +-
team/index.html | 4 +-
testapidocs/allclasses-index.html | 1653 +++++-----
testapidocs/index-all.html | 865 ++---
testapidocs/member-search-index.js | 2 +-
.../hadoop/hbase/class-use/HBaseClassTestRule.html | 514 +--
.../class-use/HBaseParameterizedTestTemplate.html | 135 +-
.../hadoop/hbase/class-use/HBaseTestingUtil.html | 6 +-
.../hbase/class-use/TableNameTestExtension.html | 29 +-
.../hadoop/hbase/class-use/TableNameTestRule.html | 27 +-
...html => SnapshotCloneIndependenceTestBase.html} | 17 +-
...Client.html => SnapshotFromClientTestBase.html} | 19 +-
...tml => SnapshotTemporaryDirectoryTestBase.html} | 19 +-
.../class-use/TestSnapshotCloneIndependence.html | 29 +-
.../client/class-use/TestSnapshotFromClient.html | 32 +-
.../class-use/TestSnapshotTemporaryDirectory.html | 33 +-
.../hadoop/hbase/client/package-summary.html | 962 +++---
.../apache/hadoop/hbase/client/package-tree.html | 37 +-
.../apache/hadoop/hbase/client/package-use.html | 50 +-
.../class-use/TestFilterListHintDelegation.html | 37 +-
.../hadoop/hbase/filter/package-summary.html | 93 +-
.../apache/hadoop/hbase/filter/package-tree.html | 1 +
.../org/apache/hadoop/hbase/package-use.html | 50 +-
testapidocs/overview-tree.html | 38 +-
...ncTableRegionReplicasRead.FailPrimaryGetCP.html | 356 +-
.../AbstractTestAsyncTableRegionReplicasRead.html | 356 +-
.../client/AbstractTestCIOperationTimeout.html | 10 +-
.../hbase/client/AbstractTestCIRpcTimeout.html | 10 +-
...bstractTestCITimeout.SleepAndFailFirstTime.html | 30 +-
.../AbstractTestCITimeout.SleepCoprocessor.html | 30 +-
.../hadoop/hbase/client/AbstractTestCITimeout.html | 30 +-
.../hbase/client/AbstractTestRegionLocator.html | 10 +-
.../client/AbstractTestResultScannerCursor.html | 8 +-
.../AbstractTestScanCursor.SparseFilter.html | 198 +-
.../hbase/client/AbstractTestScanCursor.html | 198 +-
...tConnectionRegistriesTestBase.RegistryImpl.html | 4 +-
...eWithDifferentConnectionRegistriesTestBase.html | 4 +-
.../hbase/client/ClientPushbackTestBase.html | 40 +-
.../hadoop/hbase/client/FromClientSideTest4.html | 4 +-
.../hbase/client/FromClientSideTestBase.html | 6 +-
.../hbase/client/MetaWithReplicasTestBase.html | 22 +-
.../hbase/client/RegionReplicaTestHelper.html | 6 +-
.../client/SnapshotCloneIndependenceTestBase.html | 443 +++
.../hbase/client/SnapshotFromClientTestBase.html | 537 ++++
.../client/SnapshotTemporaryDirectoryTestBase.html | 530 +++
.../hbase/client/SnapshotWithAclTestBase.html | 100 +-
.../org/apache/hadoop/hbase/client/TestAdmin.html | 1041 +++---
.../org/apache/hadoop/hbase/client/TestAdmin1.html | 1243 ++++---
.../org/apache/hadoop/hbase/client/TestAdmin2.html | 1555 +++++----
.../org/apache/hadoop/hbase/client/TestAdmin3.html | 1023 +++---
.../org/apache/hadoop/hbase/client/TestAdmin4.html | 130 +-
.../apache/hadoop/hbase/client/TestAdminBase.html | 84 +-
.../client/TestAllowPartialScanResultCache.html | 137 +-
.../hbase/client/TestAlwaysSetScannerId.html | 195 +-
.../hbase/client/TestAppendFromClientSide.html | 129 +-
...syncAdminBuilder.TestMaxRetriesCoprocessor.html | 390 ++-
...minBuilder.TestOperationTimeoutCoprocessor.html | 390 ++-
...syncAdminBuilder.TestRpcTimeoutCoprocessor.html | 390 ++-
.../hadoop/hbase/client/TestAsyncAdminBuilder.html | 390 ++-
.../hbase/client/TestAsyncBufferMutator.html | 547 ++--
...cThrottling.ThrottlingRSRpcServicesForTest.html | 676 ++--
...pcThrottling.ThrottlingRegionServerForTest.html | 676 ++--
.../TestAsyncClientPauseForRpcThrottling.html | 676 ++--
...ntPauseForServerOverloaded.OverloadedQueue.html | 413 ++-
...ForServerOverloaded.OverloadedRpcScheduler.html | 413 ++-
...erOverloaded.OverloadedRpcSchedulerFactory.html | 413 ++-
.../TestAsyncClientPauseForServerOverloaded.html | 413 ++-
.../hbase/client/TestAsyncClientPushback.html | 119 +-
.../client/TestAsyncNonMetaRegionLocator.html | 974 +++---
...atorConcurrenyLimit.CountingRegionObserver.html | 269 +-
...stAsyncNonMetaRegionLocatorConcurrenyLimit.html | 269 +-
...TestAsyncRegionLocator.SleepRegionObserver.html | 243 +-
.../hbase/client/TestAsyncRegionLocator.html | 243 +-
.../hbase/client/TestAsyncResultScannerCursor.html | 61 +-
.../TestAsyncSingleRequestRpcRetryingCaller.html | 307 +-
.../apache/hadoop/hbase/client/TestAsyncTable.html | 3386 ++++++++++----------
.../hbase/client/TestAsyncTableAdminApi.html | 752 ++---
.../hbase/client/TestAsyncTableAdminApi2.html | 505 ++-
.../TestAsyncTableBatch.ErrorInjectObserver.html | 940 +++---
.../hadoop/hbase/client/TestAsyncTableBatch.html | 940 +++---
.../TestAsyncTableBatchRetryImmediately.html | 157 +-
.../client/TestAsyncTableGetMultiThreaded.html | 364 ++-
...ncTableGetMultiThreadedWithBasicCompaction.html | 41 +-
...ncTableGetMultiThreadedWithEagerCompaction.html | 41 +-
.../hbase/client/TestAsyncTableLocatePrefetch.html | 119 +-
.../TestAsyncTableLocateRegionForDeletedTable.html | 163 +-
.../TestAsyncTableNoncedRetry.SleepOnceCP.html | 683 ++--
.../hbase/client/TestAsyncTableNoncedRetry.html | 683 ++--
.../hbase/client/TestAsyncTableQueryMetrics.html | 418 ++-
.../hbase/client/TestAsyncTableRSCrashPublish.html | 143 +-
.../hbase/client/TestAsyncTableRegionLocator.html | 133 +-
.../client/TestAsyncTableRegionReplicasGet.html | 69 +-
.../client/TestAsyncTableRegionReplicasScan.html | 109 +-
.../TestAsyncTableScanException.ErrorCP.html | 299 +-
.../hbase/client/TestAsyncTableScanException.html | 299 +-
...AsyncTableScanMetricsWithScannerSuspending.html | 243 +-
.../hbase/client/TestAsyncTableScanRenewLease.html | 257 +-
.../TestAsyncTableScannerCloseWhileSuspending.html | 195 +-
...TableUseMetaReplicas.FailPrimaryMetaScanCp.html | 200 +-
.../client/TestAsyncTableUseMetaReplicas.html | 200 +-
...sIntoShippedBlocks.CompactorRegionObserver.html | 839 +++--
.../TestAvoidCellReferencesIntoShippedBlocks.html | 839 +++--
.../hbase/client/TestBatchScanResultCache.html | 179 +-
...ictionFromClient.CustomInnerRegionObserver.html | 3162 +++++++++---------
...romClient.CustomInnerRegionObserverWrapper.html | 3162 +++++++++---------
.../hbase/client/TestBlockEvictionFromClient.html | 3162 +++++++++---------
.../hbase/client/TestBootstrapNodeUpdate.html | 153 +-
.../hadoop/hbase/client/TestBufferedMutator.html | 219 +-
.../hbase/client/TestCIDeleteOperationTimeout.html | 31 +-
.../hbase/client/TestCIDeleteRpcTimeout.html | 31 +-
.../hbase/client/TestCIGetOperationTimeout.html | 31 +-
.../hadoop/hbase/client/TestCIGetRpcTimeout.html | 31 +-
.../hbase/client/TestCIIncrementRpcTimeout.html | 31 +-
.../hbase/client/TestCIPutOperationTimeout.html | 31 +-
.../hadoop/hbase/client/TestCIPutRpcTimeout.html | 31 +-
.../apache/hadoop/hbase/client/TestCISleep.html | 117 +-
...estCatalogReplicaLoadBalanceSimpleSelector.html | 205 +-
.../hadoop/hbase/client/TestCheckAndMutate.html | 1430 ++++-----
...utateWithByteBuff.TestCheckAndMutateRegion.html | 220 +-
.../client/TestCheckAndMutateWithByteBuff.html | 220 +-
.../hbase/client/TestCleanupMetaReplica.html | 61 +-
.../TestCleanupMetaReplicaThroughConfig.html | 87 +-
...stClientOperationInterrupt.TestCoprocessor.html | 307 +-
.../hbase/client/TestClientOperationInterrupt.html | 307 +-
.../hbase/client/TestClientScannerTimeouts.html | 814 +++--
.../hbase/client/TestClientSideRegionScanner.html | 680 ++--
.../hbase/client/TestClientTableMetrics.html | 234 +-
.../TestClientTimeouts.RandomTimeoutRpcClient.html | 297 +-
.../hadoop/hbase/client/TestClientTimeouts.html | 297 +-
.../client/TestCompleteResultScanResultCache.html | 321 +-
.../apache/hadoop/hbase/client/TestConnection.html | 216 +-
...ConnectionAttributes.AttributesCoprocessor.html | 177 +-
.../hbase/client/TestConnectionAttributes.html | 177 +-
.../hadoop/hbase/client/TestConnectionUtils.html | 111 +-
...meoutRequest.SleepLongerAtFirstCoprocessor.html | 195 +-
.../hbase/client/TestDropTimeoutRequest.html | 195 +-
.../client/TestEnableTable.MasterSyncObserver.html | 327 +-
.../hadoop/hbase/client/TestEnableTable.html | 327 +-
...ssigment.BrokenMasterMetaAssignmentManager.html | 275 +-
...taReplicaAssigment.BrokenMetaReplicaMaster.html | 275 +-
...ssigment.BrokenTransitRegionStateProcedure.html | 275 +-
.../client/TestFailedMetaReplicaAssigment.html | 275 +-
.../hbase/client/TestFallbackToUseReplay.html | 173 +-
.../hadoop/hbase/client/TestFlushFromClient.html | 420 ++-
...tFlushFromClientWithDisabledFlushProcedure.html | 185 +-
.../TestGetProcedureResult.DummyProcedure.html | 199 +-
.../hbase/client/TestGetProcedureResult.html | 199 +-
.../TestGetScanColumnsWithNewVersionBehavior.html | 151 +-
.../hbase/client/TestGetScanPartialResult.html | 155 +-
...FailingMergeAfterMetaUpdatedMasterObserver.html | 714 ++---
...FailingSplitAfterMetaUpdatedMasterObserver.html | 714 ++---
.../hbase/client/TestHbck.SuspendProcedure.html | 714 ++---
.../org/apache/hadoop/hbase/client/TestHbck.html | 714 ++---
.../hbase/client/TestIllegalTableDescriptor.html | 421 ++-
.../TestIncreaseMetaReplicaThroughConfig.html | 89 +-
...TestIncrementFromClientSideWithCoprocessor.html | 46 +-
.../hbase/client/TestIncrementsFromClientSide.html | 1047 +++---
.../hbase/client/TestIntraRowPagination.html | 171 +-
.../TestInvalidMutationDurabilityException.html | 246 +-
.../hbase/client/TestLimitedScanWithFilter.html | 309 +-
.../hbase/client/TestMalformedCellFromClient.html | 620 ++--
.../hadoop/hbase/client/TestMasterRegistry.html | 324 +-
...MetaCache.CallQueueTooBigExceptionInjector.html | 835 +++--
.../client/TestMetaCache.ExceptionInjector.html | 835 +++--
.../client/TestMetaCache.FakeRSRpcServices.html | 835 +++--
...tMetaCache.RegionServerWithFakeRpcServices.html | 835 +++--
.../TestMetaCache.RoundRobinExceptionInjector.html | 835 +++--
.../apache/hadoop/hbase/client/TestMetaCache.html | 835 +++--
.../hbase/client/TestMetaRegionLocationCache.html | 339 +-
.../client/TestMetaReplicasAddressChange.html | 127 +-
.../client/TestMetaTableAccessorNoCluster.html | 117 +-
.../hbase/client/TestMetaWithReplicasBasic.html | 131 +-
.../TestMetaWithReplicasShutdownHandling.html | 273 +-
.../client/TestMobSnapshotCloneIndependence.html | 88 +-
.../hbase/client/TestMobSnapshotFromClient.html | 72 +-
.../client/TestMultiActionMetricsFromClient.html | 113 +-
.../client/TestMultiParallel.MyMasterObserver.html | 1241 ++++---
.../hadoop/hbase/client/TestMultiParallel.html | 1241 ++++---
.../hbase/client/TestMultiRespectsLimits.html | 385 ++-
.../hbase/client/TestMultipleTimestamps.html | 930 +++---
.../hbase/client/TestMutationGetCellBuilder.html | 155 +-
.../hbase/client/TestMvccConsistentScanner.html | 210 +-
.../hbase/client/TestPreadReversedScanner.html | 241 +-
.../client/TestPutDeleteEtcCellIteration.html | 256 +-
.../hadoop/hbase/client/TestPutWithDelete.html | 170 +-
.../hbase/client/TestRawAsyncScanCursor.html | 285 +-
.../TestRawAsyncTableLimitedScanWithFilter.html | 305 +-
.../hbase/client/TestRawAsyncTablePartialScan.html | 185 +-
.../hbase/client/TestRegionLocationCaching.html | 415 ++-
.../hadoop/hbase/client/TestRegionLocator.html | 147 +-
...rverHostingPrimayMetaRegionSlowOrStopCopro.html | 1250 ++++----
...eplicaWithCluster.RegionServerStoppedCopro.html | 1250 ++++----
.../client/TestReplicaWithCluster.SlowMeCopro.html | 1250 ++++----
.../hbase/client/TestReplicaWithCluster.html | 1250 ++++----
.../client/TestReplicasClient.SlowMeCopro.html | 1333 ++++----
.../hadoop/hbase/client/TestReplicasClient.html | 1333 ++++----
...estRequestAttributes.AttributesCoprocessor.html | 637 ++--
...ontrollerFactory.RequestMetadataController.html | 637 ++--
...ttributes.RequestMetadataControllerFactory.html | 637 ++--
.../hadoop/hbase/client/TestRequestAttributes.html | 637 ++--
.../hbase/client/TestRequestTooBigException.html | 113 +-
.../org/apache/hadoop/hbase/client/TestResult.html | 990 +++---
.../TestResultFromCoprocessor.MyObserver.html | 215 +-
.../hbase/client/TestResultFromCoprocessor.html | 215 +-
.../hbase/client/TestResultScannerCursor.html | 43 +-
.../hbase/client/TestResultSizeEstimation.html | 211 +-
.../hbase/client/TestRpcConnectionRegistry.html | 253 +-
.../hadoop/hbase/client/TestScanAttributes.html | 58 +-
.../hbase/client/TestScanWithoutFetchingData.html | 239 +-
.../hadoop/hbase/client/TestScannerTimeout.html | 363 ++-
.../hbase/client/TestScannersFromClientSide2.html | 450 ++-
.../hbase/client/TestSeparateClientZKCluster.html | 535 ++--
.../TestServerBusyException.SleepCoprocessor.html | 401 ++-
...usyException.SleepLongerAtFirstCoprocessor.html | 401 ++-
.../hbase/client/TestServerBusyException.html | 401 ++-
.../hbase/client/TestServerLoadDurability.html | 189 +-
.../client/TestShutdownOfMetaReplicaHolder.html | 89 +-
.../hadoop/hbase/client/TestSizeFailures.html | 280 +-
.../client/TestSnapshotCloneIndependence.html | 390 +--
.../client/TestSnapshotDFSTemporaryDirectory.html | 36 +-
.../hbase/client/TestSnapshotFromClient.html | 487 +--
.../TestSnapshotFromClientWithRegionReplicas.html | 49 +-
.../hadoop/hbase/client/TestSnapshotMetadata.html | 545 ++--
.../client/TestSnapshotTemporaryDirectory.html | 477 +--
...apshotTemporaryDirectoryWithRegionReplicas.html | 44 +-
.../hadoop/hbase/client/TestSnapshotWithAcl.html | 53 +-
.../client/TestSnapshotWithAclAsyncAdmin.html | 75 +-
.../client/TestSnapshotWithTTLFromClient.html | 413 ++-
.../hbase/client/TestSplitOrMergeAtTableLevel.html | 497 ++-
.../hbase/client/TestSplitOrMergeStatus.html | 388 ++-
.../hadoop/hbase/client/TestTableFavoredNodes.html | 672 ++--
...tion.ThrowDoNotRetryIOExceptionCoprocessor.html | 322 +-
...ationException.ThrowIOExceptionCoprocessor.html | 322 +-
.../hbase/client/TestTableOperationException.html | 322 +-
.../hbase/client/TestTableSnapshotScanner.html | 1196 ++++---
.../client/TestTableSnapshotScannerWithSFT.html | 39 +-
.../hadoop/hbase/client/TestTimestampsFilter.html | 664 ++--
.../hbase/client/TestUpdateConfiguration.html | 180 +-
.../hbase/client/TestZKConnectionRegistry.html | 195 +-
.../hbase/client/locking/TestEntityLocks.html | 335 +-
.../client/replication/TestBadReplicationPeer.html | 135 +-
.../TestReplicationAdminForSyncReplication.html | 183 +-
.../hbase/filter/TestFilterHintForRejectedRow.html | 1971 ++++++++----
.../hbase/filter/TestFilterListHintDelegation.html | 787 +++++
testapidocs/type-search-index.js | 2 +-
testdevapidocs/allclasses-index.html | 2369 +++++++-------
testdevapidocs/constant-values.html | 90 +-
testdevapidocs/index-all.html | 1000 +++---
testdevapidocs/member-search-index.js | 2 +-
.../hadoop/hbase/class-use/HBaseClassTestRule.html | 522 +--
.../class-use/HBaseParameterizedTestTemplate.html | 135 +-
.../hadoop/hbase/class-use/HBaseTestingUtil.html | 70 +-
.../hbase/class-use/TableNameTestExtension.html | 19 +-
.../hadoop/hbase/class-use/TableNameTestRule.html | 27 +-
...ncTableRegionReplicasRead.FailPrimaryGetCP.html | 12 +-
.../AbstractTestAsyncTableRegionReplicasRead.html | 99 +-
.../client/AbstractTestCIOperationTimeout.html | 6 +-
.../hbase/client/AbstractTestCIRpcTimeout.html | 6 +-
.../hadoop/hbase/client/AbstractTestCITimeout.html | 11 +-
.../hbase/client/AbstractTestRegionLocator.html | 18 +-
.../client/AbstractTestResultScannerCursor.html | 11 +-
.../AbstractTestScanCursor.SparseFilter.html | 12 +-
.../hbase/client/AbstractTestScanCursor.html | 66 +-
.../hbase/client/ClientPushbackTestBase.html | 12 +-
.../hbase/client/MetaWithReplicasTestBase.html | 10 +-
...html => SnapshotCloneIndependenceTestBase.html} | 258 +-
...Client.html => SnapshotFromClientTestBase.html} | 205 +-
...tml => SnapshotTemporaryDirectoryTestBase.html} | 192 +-
.../hbase/client/SnapshotWithAclTestBase.html | 23 +-
.../org/apache/hadoop/hbase/client/TestAdmin.html | 75 +-
.../org/apache/hadoop/hbase/client/TestAdmin1.html | 72 +-
.../org/apache/hadoop/hbase/client/TestAdmin2.html | 130 +-
.../org/apache/hadoop/hbase/client/TestAdmin3.html | 73 +-
.../org/apache/hadoop/hbase/client/TestAdmin4.html | 40 +-
.../apache/hadoop/hbase/client/TestAdminBase.html | 39 +-
.../client/TestAllowPartialScanResultCache.html | 31 +-
.../hbase/client/TestAlwaysSetScannerId.html | 69 +-
.../hbase/client/TestAppendFromClientSide.html | 48 +-
...syncAdminBuilder.TestMaxRetriesCoprocessor.html | 10 +-
...minBuilder.TestOperationTimeoutCoprocessor.html | 10 +-
...syncAdminBuilder.TestRpcTimeoutCoprocessor.html | 8 +-
.../hadoop/hbase/client/TestAsyncAdminBuilder.html | 80 +-
...yncBufferMutator.AsyncBufferMutatorForTest.html | 8 +-
.../hbase/client/TestAsyncBufferMutator.html | 94 +-
...cThrottling.ThrottlingRSRpcServicesForTest.html | 14 +-
...pcThrottling.ThrottlingRegionServerForTest.html | 6 +-
.../TestAsyncClientPauseForRpcThrottling.html | 122 +-
...yncClientPauseForServerOverloaded.FailMode.html | 16 +-
...ntPauseForServerOverloaded.OverloadedQueue.html | 6 +-
...ForServerOverloaded.OverloadedRpcScheduler.html | 6 +-
...erOverloaded.OverloadedRpcSchedulerFactory.html | 6 +-
.../TestAsyncClientPauseForServerOverloaded.html | 83 +-
.../hbase/client/TestAsyncClientPushback.html | 44 +-
.../client/TestAsyncNonMetaRegionLocator.html | 152 +-
...atorConcurrenyLimit.CountingRegionObserver.html | 10 +-
...stAsyncNonMetaRegionLocatorConcurrenyLimit.html | 79 +-
...TestAsyncRegionLocator.SleepRegionObserver.html | 8 +-
.../hbase/client/TestAsyncRegionLocator.html | 65 +-
.../hbase/client/TestAsyncResultScannerCursor.html | 28 +-
.../TestAsyncSingleRequestRpcRetryingCaller.html | 72 +-
.../apache/hadoop/hbase/client/TestAsyncTable.html | 221 +-
.../hbase/client/TestAsyncTableAdminApi.html | 67 +-
.../hbase/client/TestAsyncTableAdminApi2.html | 28 +-
.../TestAsyncTableBatch.ErrorInjectObserver.html | 8 +-
.../hadoop/hbase/client/TestAsyncTableBatch.html | 136 +-
.../TestAsyncTableBatchRetryImmediately.html | 71 +-
.../client/TestAsyncTableGetMultiThreaded.html | 81 +-
...ncTableGetMultiThreadedWithBasicCompaction.html | 42 +-
...ncTableGetMultiThreadedWithEagerCompaction.html | 42 +-
.../hbase/client/TestAsyncTableLocatePrefetch.html | 53 +-
.../TestAsyncTableLocateRegionForDeletedTable.html | 53 +-
.../TestAsyncTableNoncedRetry.SleepOnceCP.html | 8 +-
.../hbase/client/TestAsyncTableNoncedRetry.html | 135 +-
.../hbase/client/TestAsyncTableQueryMetrics.html | 84 +-
.../hbase/client/TestAsyncTableRSCrashPublish.html | 41 +-
.../hbase/client/TestAsyncTableRegionLocator.html | 40 +-
.../client/TestAsyncTableRegionReplicasGet.html | 43 +-
.../client/TestAsyncTableRegionReplicasScan.html | 37 +-
.../TestAsyncTableScanException.ErrorCP.html | 8 +-
.../hbase/client/TestAsyncTableScanException.html | 93 +-
...AsyncTableScanMetricsWithScannerSuspending.html | 55 +-
...syncTableScanRenewLease.RenewLeaseConsumer.html | 20 +-
.../hbase/client/TestAsyncTableScanRenewLease.html | 63 +-
.../TestAsyncTableScannerCloseWhileSuspending.html | 59 +-
...TableUseMetaReplicas.FailPrimaryMetaScanCp.html | 8 +-
.../client/TestAsyncTableUseMetaReplicas.html | 67 +-
...IntoShippedBlocks.CompactorInternalScanner.html | 6 +-
...sIntoShippedBlocks.CompactorRegionObserver.html | 8 +-
...lReferencesIntoShippedBlocks.ScannerThread.html | 10 +-
.../TestAvoidCellReferencesIntoShippedBlocks.html | 157 +-
.../hbase/client/TestBatchScanResultCache.html | 37 +-
...ictionFromClient.CustomInnerRegionObserver.html | 24 +-
...romClient.CustomInnerRegionObserverWrapper.html | 6 +-
.../TestBlockEvictionFromClient.CustomScanner.html | 30 +-
.../TestBlockEvictionFromClient.GetThread.html | 14 +-
...TestBlockEvictionFromClient.MultiGetThread.html | 10 +-
.../TestBlockEvictionFromClient.ScanThread.html | 12 +-
.../hbase/client/TestBlockEvictionFromClient.html | 213 +-
.../hbase/client/TestBootstrapNodeUpdate.html | 35 +-
.../hadoop/hbase/client/TestBufferedMutator.html | 60 +-
.../hbase/client/TestCIDeleteOperationTimeout.html | 32 +-
.../hbase/client/TestCIDeleteRpcTimeout.html | 32 +-
.../hbase/client/TestCIGetOperationTimeout.html | 32 +-
.../hadoop/hbase/client/TestCIGetRpcTimeout.html | 32 +-
.../hbase/client/TestCIIncrementRpcTimeout.html | 32 +-
.../hbase/client/TestCIPutOperationTimeout.html | 32 +-
.../hadoop/hbase/client/TestCIPutRpcTimeout.html | 32 +-
.../apache/hadoop/hbase/client/TestCISleep.html | 32 +-
...estCatalogReplicaLoadBalanceSimpleSelector.html | 61 +-
.../hadoop/hbase/client/TestCheckAndMutate.html | 233 +-
...utateWithByteBuff.TestCheckAndMutateRegion.html | 8 +-
.../client/TestCheckAndMutateWithByteBuff.html | 72 +-
.../hbase/client/TestCleanupMetaReplica.html | 36 +-
.../TestCleanupMetaReplicaThroughConfig.html | 36 +-
...stClientOperationInterrupt.TestCoprocessor.html | 8 +-
.../hbase/client/TestClientOperationInterrupt.html | 65 +-
...annerTimeouts.RSRpcServicesWithScanTimeout.html | 28 +-
...cannerTimeouts.RegionServerWithScanTimeout.html | 6 +-
.../hbase/client/TestClientScannerTimeouts.html | 185 +-
...ientSideRegionScanner.FiltersRowsLessThan5.html | 8 +-
.../hbase/client/TestClientSideRegionScanner.html | 125 +-
.../hbase/client/TestClientTableMetrics.html | 68 +-
...ntTimeouts.RandomTimeoutBlockingRpcChannel.html | 6 +-
...TestClientTimeouts.RandomTimeoutRpcChannel.html | 6 +-
.../TestClientTimeouts.RandomTimeoutRpcClient.html | 8 +-
.../hadoop/hbase/client/TestClientTimeouts.html | 45 +-
.../client/TestCompleteResultScanResultCache.html | 59 +-
.../apache/hadoop/hbase/client/TestConnection.html | 172 +-
...ConnectionAttributes.AttributesCoprocessor.html | 8 +-
.../hbase/client/TestConnectionAttributes.html | 53 +-
.../hadoop/hbase/client/TestConnectionUtils.html | 44 +-
...meoutRequest.SleepLongerAtFirstCoprocessor.html | 12 +-
.../hbase/client/TestDropTimeoutRequest.html | 63 +-
.../client/TestEnableTable.MasterSyncObserver.html | 14 +-
.../hadoop/hbase/client/TestEnableTable.html | 54 +-
...ssigment.BrokenMasterMetaAssignmentManager.html | 8 +-
...taReplicaAssigment.BrokenMetaReplicaMaster.html | 6 +-
...ssigment.BrokenTransitRegionStateProcedure.html | 8 +-
.../client/TestFailedMetaReplicaAssigment.html | 29 +-
.../hbase/client/TestFallbackToUseReplay.html | 49 +-
.../hadoop/hbase/client/TestFlushFromClient.html | 111 +-
...tFlushFromClientWithDisabledFlushProcedure.html | 62 +-
.../TestGetProcedureResult.DummyProcedure.html | 22 +-
.../hbase/client/TestGetProcedureResult.html | 31 +-
.../TestGetScanColumnsWithNewVersionBehavior.html | 61 +-
.../hbase/client/TestGetScanPartialResult.html | 57 +-
...FailingMergeAfterMetaUpdatedMasterObserver.html | 14 +-
...FailingSplitAfterMetaUpdatedMasterObserver.html | 14 +-
.../hbase/client/TestHbck.SuspendProcedure.html | 10 +-
.../org/apache/hadoop/hbase/client/TestHbck.html | 86 +-
.../hbase/client/TestIllegalTableDescriptor.html | 86 +-
.../TestIncreaseMetaReplicaThroughConfig.html | 36 +-
...TestIncrementFromClientSideWithCoprocessor.html | 35 +-
.../hbase/client/TestIncrementsFromClientSide.html | 148 +-
.../hbase/client/TestIntraRowPagination.html | 23 +-
.../TestInvalidMutationDurabilityException.html | 90 +-
.../hbase/client/TestLimitedScanWithFilter.html | 65 +-
.../hbase/client/TestMalformedCellFromClient.html | 71 +-
.../hadoop/hbase/client/TestMasterRegistry.html | 40 +-
...MetaCache.CallQueueTooBigExceptionInjector.html | 10 +-
.../client/TestMetaCache.ExceptionInjector.html | 12 +-
.../client/TestMetaCache.FakeRSRpcServices.html | 14 +-
...tMetaCache.RegionServerWithFakeRpcServices.html | 10 +-
.../TestMetaCache.RoundRobinExceptionInjector.html | 18 +-
.../apache/hadoop/hbase/client/TestMetaCache.html | 89 +-
.../hbase/client/TestMetaRegionLocationCache.html | 48 +-
.../client/TestMetaReplicasAddressChange.html | 26 +-
.../client/TestMetaTableAccessorNoCluster.html | 29 +-
.../hbase/client/TestMetaWithReplicasBasic.html | 42 +-
.../TestMetaWithReplicasShutdownHandling.html | 28 +-
.../client/TestMobSnapshotCloneIndependence.html | 64 +-
.../hbase/client/TestMobSnapshotFromClient.html | 55 +-
.../client/TestMultiActionMetricsFromClient.html | 45 +-
.../client/TestMultiParallel.MyMasterObserver.html | 14 +-
.../hadoop/hbase/client/TestMultiParallel.html | 129 +-
.../hbase/client/TestMultiRespectsLimits.html | 90 +-
.../hbase/client/TestMultipleTimestamps.html | 148 +-
.../hbase/client/TestMutationGetCellBuilder.html | 38 +-
.../hbase/client/TestMvccConsistentScanner.html | 76 +-
.../hbase/client/TestPreadReversedScanner.html | 61 +-
.../client/TestPutDeleteEtcCellIteration.html | 48 +-
.../hadoop/hbase/client/TestPutWithDelete.html | 38 +-
.../hbase/client/TestRawAsyncScanCursor.html | 37 +-
.../TestRawAsyncTableLimitedScanWithFilter.html | 77 +-
.../hbase/client/TestRawAsyncTablePartialScan.html | 68 +-
.../hbase/client/TestRegionLocationCaching.html | 66 +-
.../hadoop/hbase/client/TestRegionLocator.html | 50 +-
...rverHostingPrimayMetaRegionSlowOrStopCopro.html | 14 +-
...eplicaWithCluster.RegionServerStoppedCopro.html | 10 +-
.../client/TestReplicaWithCluster.SlowMeCopro.html | 12 +-
.../hbase/client/TestReplicaWithCluster.html | 85 +-
.../client/TestReplicasClient.SlowMeCopro.html | 28 +-
.../hadoop/hbase/client/TestReplicasClient.html | 133 +-
...estRequestAttributes.AttributesCoprocessor.html | 16 +-
...ontrollerFactory.RequestMetadataController.html | 8 +-
...ttributes.RequestMetadataControllerFactory.html | 14 +-
.../hadoop/hbase/client/TestRequestAttributes.html | 139 +-
.../hbase/client/TestRequestTooBigException.html | 47 +-
.../org/apache/hadoop/hbase/client/TestResult.html | 94 +-
.../TestResultFromCoprocessor.MyObserver.html | 14 +-
.../hbase/client/TestResultFromCoprocessor.html | 78 +-
.../hbase/client/TestResultScannerCursor.html | 66 +-
.../hbase/client/TestResultSizeEstimation.html | 78 +-
.../hbase/client/TestRpcConnectionRegistry.html | 46 +-
.../hadoop/hbase/client/TestScanAttributes.html | 41 +-
.../hbase/client/TestScanWithoutFetchingData.html | 71 +-
.../hadoop/hbase/client/TestScannerTimeout.html | 76 +-
.../hbase/client/TestScannersFromClientSide2.html | 108 +-
.../hbase/client/TestSeparateClientZKCluster.html | 106 +-
.../TestServerBusyException.SleepCoprocessor.html | 16 +-
...usyException.SleepLongerAtFirstCoprocessor.html | 12 +-
.../TestServerBusyException.TestGetThread.html | 10 +-
.../TestServerBusyException.TestPutThread.html | 10 +-
.../hbase/client/TestServerBusyException.html | 48 +-
.../hbase/client/TestServerLoadDurability.html | 74 +-
.../client/TestShutdownOfMetaReplicaHolder.html | 26 +-
.../hadoop/hbase/client/TestSizeFailures.html | 68 +-
.../client/TestSnapshotCloneIndependence.html | 566 +---
.../client/TestSnapshotDFSTemporaryDirectory.html | 55 +-
.../hbase/client/TestSnapshotFromClient.html | 375 +--
.../TestSnapshotFromClientWithRegionReplicas.html | 70 +-
.../hadoop/hbase/client/TestSnapshotMetadata.html | 164 +-
.../client/TestSnapshotTemporaryDirectory.html | 332 +-
...apshotTemporaryDirectoryWithRegionReplicas.html | 70 +-
.../hadoop/hbase/client/TestSnapshotWithAcl.html | 36 +-
.../client/TestSnapshotWithAclAsyncAdmin.html | 36 +-
.../client/TestSnapshotWithTTLFromClient.html | 94 +-
.../hbase/client/TestSplitOrMergeAtTableLevel.html | 108 +-
.../hbase/client/TestSplitOrMergeStatus.html | 65 +-
.../hadoop/hbase/client/TestTableFavoredNodes.html | 123 +-
...tion.ThrowDoNotRetryIOExceptionCoprocessor.html | 16 +-
...ationException.ThrowIOExceptionCoprocessor.html | 16 +-
.../hbase/client/TestTableOperationException.html | 84 +-
.../hbase/client/TestTableSnapshotScanner.html | 136 +-
.../client/TestTableSnapshotScannerWithSFT.html | 36 +-
.../hadoop/hbase/client/TestTimestampsFilter.html | 104 +-
.../hbase/client/TestUpdateConfiguration.html | 69 +-
.../hbase/client/TestZKConnectionRegistry.html | 47 +-
...html => SnapshotCloneIndependenceTestBase.html} | 17 +-
...Client.html => SnapshotFromClientTestBase.html} | 19 +-
...tml => SnapshotTemporaryDirectoryTestBase.html} | 19 +-
.../class-use/TestSnapshotCloneIndependence.html | 29 +-
.../client/class-use/TestSnapshotFromClient.html | 32 +-
.../class-use/TestSnapshotTemporaryDirectory.html | 33 +-
.../hbase/client/locking/TestEntityLocks.html | 80 +-
.../hadoop/hbase/client/package-summary.html | 1024 +++---
.../apache/hadoop/hbase/client/package-tree.html | 37 +-
.../apache/hadoop/hbase/client/package-use.html | 70 +-
.../client/replication/TestBadReplicationPeer.html | 48 +-
.../TestReplicationAdminForSyncReplication.html | 43 +-
.../hbase/filter/TestFilterHintForRejectedRow.html | 255 +-
.../hbase/filter/TestFilterListHintDelegation.html | 839 +++++
.../class-use/TestFilterListHintDelegation.html} | 37 +-
.../hadoop/hbase/filter/package-summary.html | 99 +-
.../apache/hadoop/hbase/filter/package-tree.html | 1 +
.../org/apache/hadoop/hbase/package-use.html | 231 +-
testdevapidocs/overview-tree.html | 38 +-
...ncTableRegionReplicasRead.FailPrimaryGetCP.html | 356 +-
.../AbstractTestAsyncTableRegionReplicasRead.html | 356 +-
.../client/AbstractTestCIOperationTimeout.html | 10 +-
.../hbase/client/AbstractTestCIRpcTimeout.html | 10 +-
...bstractTestCITimeout.SleepAndFailFirstTime.html | 30 +-
.../AbstractTestCITimeout.SleepCoprocessor.html | 30 +-
.../hadoop/hbase/client/AbstractTestCITimeout.html | 30 +-
.../hbase/client/AbstractTestRegionLocator.html | 10 +-
.../client/AbstractTestResultScannerCursor.html | 8 +-
.../AbstractTestScanCursor.SparseFilter.html | 198 +-
.../hbase/client/AbstractTestScanCursor.html | 198 +-
...tConnectionRegistriesTestBase.RegistryImpl.html | 4 +-
...eWithDifferentConnectionRegistriesTestBase.html | 4 +-
.../hbase/client/ClientPushbackTestBase.html | 40 +-
.../hadoop/hbase/client/FromClientSideTest4.html | 4 +-
.../hbase/client/FromClientSideTestBase.html | 6 +-
.../hbase/client/MetaWithReplicasTestBase.html | 22 +-
.../client/RegionReplicaTestHelper.Locator.html | 6 +-
.../hbase/client/RegionReplicaTestHelper.html | 6 +-
.../client/SnapshotCloneIndependenceTestBase.html | 443 +++
.../hbase/client/SnapshotFromClientTestBase.html | 537 ++++
.../client/SnapshotTemporaryDirectoryTestBase.html | 530 +++
.../SnapshotWithAclTestBase.AccessReadAction.html | 100 +-
...apshotWithAclTestBase.AccessSnapshotAction.html | 100 +-
.../SnapshotWithAclTestBase.AccessWriteAction.html | 100 +-
.../hbase/client/SnapshotWithAclTestBase.html | 100 +-
.../org/apache/hadoop/hbase/client/TestAdmin.html | 1041 +++---
.../org/apache/hadoop/hbase/client/TestAdmin1.html | 1243 ++++---
.../org/apache/hadoop/hbase/client/TestAdmin2.html | 1555 +++++----
.../org/apache/hadoop/hbase/client/TestAdmin3.html | 1023 +++---
.../org/apache/hadoop/hbase/client/TestAdmin4.html | 130 +-
.../apache/hadoop/hbase/client/TestAdminBase.html | 84 +-
.../client/TestAllowPartialScanResultCache.html | 137 +-
.../hbase/client/TestAlwaysSetScannerId.html | 195 +-
.../hbase/client/TestAppendFromClientSide.html | 129 +-
...syncAdminBuilder.TestMaxRetriesCoprocessor.html | 390 ++-
...minBuilder.TestOperationTimeoutCoprocessor.html | 390 ++-
...syncAdminBuilder.TestRpcTimeoutCoprocessor.html | 390 ++-
.../hadoop/hbase/client/TestAsyncAdminBuilder.html | 390 ++-
...yncBufferMutator.AsyncBufferMutatorForTest.html | 547 ++--
.../hbase/client/TestAsyncBufferMutator.html | 547 ++--
...cThrottling.ThrottlingRSRpcServicesForTest.html | 676 ++--
...pcThrottling.ThrottlingRegionServerForTest.html | 676 ++--
.../TestAsyncClientPauseForRpcThrottling.html | 676 ++--
...yncClientPauseForServerOverloaded.FailMode.html | 413 ++-
...ntPauseForServerOverloaded.OverloadedQueue.html | 413 ++-
...ForServerOverloaded.OverloadedRpcScheduler.html | 413 ++-
...erOverloaded.OverloadedRpcSchedulerFactory.html | 413 ++-
.../TestAsyncClientPauseForServerOverloaded.html | 413 ++-
.../hbase/client/TestAsyncClientPushback.html | 119 +-
.../client/TestAsyncNonMetaRegionLocator.html | 974 +++---
...atorConcurrenyLimit.CountingRegionObserver.html | 269 +-
...stAsyncNonMetaRegionLocatorConcurrenyLimit.html | 269 +-
...TestAsyncRegionLocator.SleepRegionObserver.html | 243 +-
.../hbase/client/TestAsyncRegionLocator.html | 243 +-
.../hbase/client/TestAsyncResultScannerCursor.html | 61 +-
.../TestAsyncSingleRequestRpcRetryingCaller.html | 307 +-
.../apache/hadoop/hbase/client/TestAsyncTable.html | 3386 ++++++++++----------
.../hbase/client/TestAsyncTableAdminApi.html | 752 ++---
.../hbase/client/TestAsyncTableAdminApi2.html | 505 ++-
.../TestAsyncTableBatch.ErrorInjectObserver.html | 940 +++---
.../hadoop/hbase/client/TestAsyncTableBatch.html | 940 +++---
.../TestAsyncTableBatchRetryImmediately.html | 157 +-
.../client/TestAsyncTableGetMultiThreaded.html | 364 ++-
...ncTableGetMultiThreadedWithBasicCompaction.html | 41 +-
...ncTableGetMultiThreadedWithEagerCompaction.html | 41 +-
.../hbase/client/TestAsyncTableLocatePrefetch.html | 119 +-
.../TestAsyncTableLocateRegionForDeletedTable.html | 163 +-
.../TestAsyncTableNoncedRetry.SleepOnceCP.html | 683 ++--
.../hbase/client/TestAsyncTableNoncedRetry.html | 683 ++--
.../hbase/client/TestAsyncTableQueryMetrics.html | 418 ++-
.../hbase/client/TestAsyncTableRSCrashPublish.html | 143 +-
.../hbase/client/TestAsyncTableRegionLocator.html | 133 +-
.../client/TestAsyncTableRegionReplicasGet.html | 69 +-
.../client/TestAsyncTableRegionReplicasScan.html | 109 +-
.../TestAsyncTableScanException.ErrorCP.html | 299 +-
.../hbase/client/TestAsyncTableScanException.html | 299 +-
...AsyncTableScanMetricsWithScannerSuspending.html | 243 +-
...syncTableScanRenewLease.RenewLeaseConsumer.html | 257 +-
.../hbase/client/TestAsyncTableScanRenewLease.html | 257 +-
.../TestAsyncTableScannerCloseWhileSuspending.html | 195 +-
...TableUseMetaReplicas.FailPrimaryMetaScanCp.html | 200 +-
.../client/TestAsyncTableUseMetaReplicas.html | 200 +-
...IntoShippedBlocks.CompactorInternalScanner.html | 839 +++--
...sIntoShippedBlocks.CompactorRegionObserver.html | 839 +++--
...lReferencesIntoShippedBlocks.ScannerThread.html | 839 +++--
.../TestAvoidCellReferencesIntoShippedBlocks.html | 839 +++--
.../hbase/client/TestBatchScanResultCache.html | 179 +-
...ictionFromClient.CustomInnerRegionObserver.html | 3162 +++++++++---------
...romClient.CustomInnerRegionObserverWrapper.html | 3162 +++++++++---------
.../TestBlockEvictionFromClient.CustomScanner.html | 3162 +++++++++---------
.../TestBlockEvictionFromClient.GetThread.html | 3162 +++++++++---------
...TestBlockEvictionFromClient.MultiGetThread.html | 3162 +++++++++---------
.../TestBlockEvictionFromClient.ScanThread.html | 3162 +++++++++---------
.../hbase/client/TestBlockEvictionFromClient.html | 3162 +++++++++---------
.../hbase/client/TestBootstrapNodeUpdate.html | 153 +-
.../hadoop/hbase/client/TestBufferedMutator.html | 219 +-
.../hbase/client/TestCIDeleteOperationTimeout.html | 31 +-
.../hbase/client/TestCIDeleteRpcTimeout.html | 31 +-
.../hbase/client/TestCIGetOperationTimeout.html | 31 +-
.../hadoop/hbase/client/TestCIGetRpcTimeout.html | 31 +-
.../hbase/client/TestCIIncrementRpcTimeout.html | 31 +-
.../hbase/client/TestCIPutOperationTimeout.html | 31 +-
.../hadoop/hbase/client/TestCIPutRpcTimeout.html | 31 +-
.../apache/hadoop/hbase/client/TestCISleep.html | 117 +-
...estCatalogReplicaLoadBalanceSimpleSelector.html | 205 +-
.../hadoop/hbase/client/TestCheckAndMutate.html | 1430 ++++-----
...utateWithByteBuff.TestCheckAndMutateRegion.html | 220 +-
.../client/TestCheckAndMutateWithByteBuff.html | 220 +-
.../hbase/client/TestCleanupMetaReplica.html | 61 +-
.../TestCleanupMetaReplicaThroughConfig.html | 87 +-
...stClientOperationInterrupt.TestCoprocessor.html | 307 +-
.../hbase/client/TestClientOperationInterrupt.html | 307 +-
...annerTimeouts.RSRpcServicesWithScanTimeout.html | 814 +++--
...cannerTimeouts.RegionServerWithScanTimeout.html | 814 +++--
.../hbase/client/TestClientScannerTimeouts.html | 814 +++--
...ientSideRegionScanner.FiltersRowsLessThan5.html | 680 ++--
.../hbase/client/TestClientSideRegionScanner.html | 680 ++--
.../hbase/client/TestClientTableMetrics.html | 234 +-
...ntTimeouts.RandomTimeoutBlockingRpcChannel.html | 297 +-
...TestClientTimeouts.RandomTimeoutRpcChannel.html | 297 +-
.../TestClientTimeouts.RandomTimeoutRpcClient.html | 297 +-
.../hadoop/hbase/client/TestClientTimeouts.html | 297 +-
.../client/TestCompleteResultScanResultCache.html | 321 +-
.../apache/hadoop/hbase/client/TestConnection.html | 216 +-
...ConnectionAttributes.AttributesCoprocessor.html | 177 +-
.../hbase/client/TestConnectionAttributes.html | 177 +-
.../hadoop/hbase/client/TestConnectionUtils.html | 111 +-
...meoutRequest.SleepLongerAtFirstCoprocessor.html | 195 +-
.../hbase/client/TestDropTimeoutRequest.html | 195 +-
.../client/TestEnableTable.MasterSyncObserver.html | 327 +-
.../hadoop/hbase/client/TestEnableTable.html | 327 +-
...ssigment.BrokenMasterMetaAssignmentManager.html | 275 +-
...taReplicaAssigment.BrokenMetaReplicaMaster.html | 275 +-
...ssigment.BrokenTransitRegionStateProcedure.html | 275 +-
.../client/TestFailedMetaReplicaAssigment.html | 275 +-
.../hbase/client/TestFallbackToUseReplay.html | 173 +-
.../hadoop/hbase/client/TestFlushFromClient.html | 420 ++-
...tFlushFromClientWithDisabledFlushProcedure.html | 185 +-
.../TestGetProcedureResult.DummyProcedure.html | 199 +-
.../hbase/client/TestGetProcedureResult.html | 199 +-
.../TestGetScanColumnsWithNewVersionBehavior.html | 151 +-
.../hbase/client/TestGetScanPartialResult.html | 155 +-
...FailingMergeAfterMetaUpdatedMasterObserver.html | 714 ++---
...FailingSplitAfterMetaUpdatedMasterObserver.html | 714 ++---
.../hbase/client/TestHbck.SuspendProcedure.html | 714 ++---
.../org/apache/hadoop/hbase/client/TestHbck.html | 714 ++---
.../hbase/client/TestIllegalTableDescriptor.html | 421 ++-
.../TestIncreaseMetaReplicaThroughConfig.html | 89 +-
...TestIncrementFromClientSideWithCoprocessor.html | 46 +-
.../hbase/client/TestIncrementsFromClientSide.html | 1047 +++---
.../hbase/client/TestIntraRowPagination.html | 171 +-
.../TestInvalidMutationDurabilityException.html | 246 +-
.../hbase/client/TestLimitedScanWithFilter.html | 309 +-
.../hbase/client/TestMalformedCellFromClient.html | 620 ++--
.../hadoop/hbase/client/TestMasterRegistry.html | 324 +-
...MetaCache.CallQueueTooBigExceptionInjector.html | 835 +++--
.../client/TestMetaCache.ExceptionInjector.html | 835 +++--
.../client/TestMetaCache.FakeRSRpcServices.html | 835 +++--
...tMetaCache.RegionServerWithFakeRpcServices.html | 835 +++--
.../TestMetaCache.RoundRobinExceptionInjector.html | 835 +++--
.../apache/hadoop/hbase/client/TestMetaCache.html | 835 +++--
.../hbase/client/TestMetaRegionLocationCache.html | 339 +-
.../client/TestMetaReplicasAddressChange.html | 127 +-
.../client/TestMetaTableAccessorNoCluster.html | 117 +-
.../hbase/client/TestMetaWithReplicasBasic.html | 131 +-
.../TestMetaWithReplicasShutdownHandling.html | 273 +-
.../client/TestMobSnapshotCloneIndependence.html | 88 +-
.../hbase/client/TestMobSnapshotFromClient.html | 72 +-
.../client/TestMultiActionMetricsFromClient.html | 113 +-
.../client/TestMultiParallel.MyMasterObserver.html | 1241 ++++---
.../hadoop/hbase/client/TestMultiParallel.html | 1241 ++++---
.../hbase/client/TestMultiRespectsLimits.html | 385 ++-
.../hbase/client/TestMultipleTimestamps.html | 930 +++---
.../hbase/client/TestMutationGetCellBuilder.html | 155 +-
.../hbase/client/TestMvccConsistentScanner.html | 210 +-
.../hbase/client/TestPreadReversedScanner.html | 241 +-
.../client/TestPutDeleteEtcCellIteration.html | 256 +-
.../hadoop/hbase/client/TestPutWithDelete.html | 170 +-
.../hbase/client/TestRawAsyncScanCursor.html | 285 +-
.../TestRawAsyncTableLimitedScanWithFilter.html | 305 +-
.../hbase/client/TestRawAsyncTablePartialScan.html | 185 +-
.../hbase/client/TestRegionLocationCaching.html | 415 ++-
.../hadoop/hbase/client/TestRegionLocator.html | 147 +-
...rverHostingPrimayMetaRegionSlowOrStopCopro.html | 1250 ++++----
...eplicaWithCluster.RegionServerStoppedCopro.html | 1250 ++++----
.../client/TestReplicaWithCluster.SlowMeCopro.html | 1250 ++++----
.../hbase/client/TestReplicaWithCluster.html | 1250 ++++----
.../client/TestReplicasClient.SlowMeCopro.html | 1333 ++++----
.../hadoop/hbase/client/TestReplicasClient.html | 1333 ++++----
...estRequestAttributes.AttributesCoprocessor.html | 637 ++--
...ontrollerFactory.RequestMetadataController.html | 637 ++--
...ttributes.RequestMetadataControllerFactory.html | 637 ++--
.../hadoop/hbase/client/TestRequestAttributes.html | 637 ++--
.../hbase/client/TestRequestTooBigException.html | 113 +-
.../org/apache/hadoop/hbase/client/TestResult.html | 990 +++---
.../TestResultFromCoprocessor.MyObserver.html | 215 +-
.../hbase/client/TestResultFromCoprocessor.html | 215 +-
.../hbase/client/TestResultScannerCursor.html | 43 +-
.../hbase/client/TestResultSizeEstimation.html | 211 +-
.../hbase/client/TestRpcConnectionRegistry.html | 253 +-
.../hadoop/hbase/client/TestScanAttributes.html | 58 +-
.../hbase/client/TestScanWithoutFetchingData.html | 239 +-
.../hadoop/hbase/client/TestScannerTimeout.html | 363 ++-
.../hbase/client/TestScannersFromClientSide2.html | 450 ++-
.../hbase/client/TestSeparateClientZKCluster.html | 535 ++--
.../TestServerBusyException.SleepCoprocessor.html | 401 ++-
...usyException.SleepLongerAtFirstCoprocessor.html | 401 ++-
.../TestServerBusyException.TestGetThread.html | 401 ++-
.../TestServerBusyException.TestPutThread.html | 401 ++-
.../hbase/client/TestServerBusyException.html | 401 ++-
.../hbase/client/TestServerLoadDurability.html | 189 +-
.../client/TestShutdownOfMetaReplicaHolder.html | 89 +-
.../hadoop/hbase/client/TestSizeFailures.html | 280 +-
.../client/TestSnapshotCloneIndependence.html | 390 +--
.../client/TestSnapshotDFSTemporaryDirectory.html | 36 +-
.../hbase/client/TestSnapshotFromClient.html | 487 +--
.../TestSnapshotFromClientWithRegionReplicas.html | 49 +-
.../hadoop/hbase/client/TestSnapshotMetadata.html | 545 ++--
.../client/TestSnapshotTemporaryDirectory.html | 477 +--
...apshotTemporaryDirectoryWithRegionReplicas.html | 44 +-
.../hadoop/hbase/client/TestSnapshotWithAcl.html | 53 +-
.../client/TestSnapshotWithAclAsyncAdmin.html | 75 +-
.../client/TestSnapshotWithTTLFromClient.html | 413 ++-
.../hbase/client/TestSplitOrMergeAtTableLevel.html | 497 ++-
.../hbase/client/TestSplitOrMergeStatus.html | 388 ++-
.../hadoop/hbase/client/TestTableFavoredNodes.html | 672 ++--
...tion.ThrowDoNotRetryIOExceptionCoprocessor.html | 322 +-
...ationException.ThrowIOExceptionCoprocessor.html | 322 +-
.../hbase/client/TestTableOperationException.html | 322 +-
.../hbase/client/TestTableSnapshotScanner.html | 1196 ++++---
.../client/TestTableSnapshotScannerWithSFT.html | 39 +-
.../hadoop/hbase/client/TestTimestampsFilter.html | 664 ++--
.../hbase/client/TestUpdateConfiguration.html | 180 +-
.../hbase/client/TestZKConnectionRegistry.html | 195 +-
.../hbase/client/locking/TestEntityLocks.html | 335 +-
.../client/replication/TestBadReplicationPeer.html | 135 +-
.../TestReplicationAdminForSyncReplication.html | 183 +-
.../hbase/filter/TestFilterHintForRejectedRow.html | 1971 ++++++++----
.../hbase/filter/TestFilterListHintDelegation.html | 787 +++++
testdevapidocs/type-search-index.js | 2 +-
921 files changed, 120307 insertions(+), 119821 deletions(-)
diff --git a/__spa-fallback.html b/__spa-fallback.html
index 3774adf10b3..19ffdb1cdb9 100644
--- a/__spa-fallback.html
+++ b/__spa-fallback.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="modulepreload" href="/assets/entry.client-_CVK9qYI.js" [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="modulepreload" href="/assets/entry.client-_CVK9qYI.js" [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -19,7 +19,7 @@
"functions. Check out https://reactrouter.com/start/framework/route-module#hydratefallback " +
"for more information."
);
- </script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":true};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamController = controller;}}).pipeTh [...]
+ </script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":true};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamController = controller;}}).pipeTh [...]
import * as route0 from "/assets/root-DCifVNB4.js";
window.__reactRouterRouteModules = {"root":route0};
diff --git a/acid-semantics/index.html b/acid-semantics/index.html
index 41cd986bf25..724e38b612f 100644
--- a/acid-semantics/index.html
+++ b/acid-semantics/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/images/logo.svg"/><title>ACID Semantics - Apache HBase</title><meta name="description" content="Apache HBase ACID properties and guarantees specification."/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-l [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/images/logo.svg"/><title>ACID Semantics - Apache HBase</title><meta name="description" content="Apache HBase ACID properties and guarantees specification."/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-l [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -133,7 +133,7 @@ an update is considered visible if any subsequent read will see the update as ha
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/landing-layout-By78yIYe.js";
import * as route2 from "/assets/acid-semantics-BoTYVlwm.js";
diff --git a/apidocs/index-all.html b/apidocs/index-all.html
index efda800ae7d..614babc5848 100644
--- a/apidocs/index-all.html
+++ b/apidocs/index-all.html
@@ -25635,12 +25635,26 @@ loadScripts(document, 'script');</script>
<div class="block">Filters that cannot provide a seek hint after row-key rejection can inherit this no-op
implementation.</div>
</dd>
+<dt>getHintForRejectedRow(Cell) - Method in class org.apache.hadoop.hbase.filter.FilterList</dt>
+<dd> </dd>
+<dt>getHintForRejectedRow(Cell) - Method in class org.apache.hadoop.hbase.filter.FilterListWithAND</dt>
+<dd>
+<div class="block">Maximal step: return the farthest hint among sub-filters that actually rejected the row.</div>
+</dd>
+<dt>getHintForRejectedRow(Cell) - Method in class org.apache.hadoop.hbase.filter.FilterListWithOR</dt>
+<dd>
+<div class="block">Minimal step: return the nearest hint.</div>
+</dd>
<dt>getHintForRejectedRow(Cell) - Method in class org.apache.hadoop.hbase.filter.FilterWrapper</dt>
<dd>
<div class="block">Delegates to the wrapped filter's <code>Filter.getHintForRejectedRow(Cell)</code> so that the scan
pipeline can seek directly past a rejected row rather than iterating cell-by-cell via
<code>nextRow()</code>.</div>
</dd>
+<dt>getHintForRejectedRow(Cell) - Method in class org.apache.hadoop.hbase.filter.SkipFilter</dt>
+<dd> </dd>
+<dt>getHintForRejectedRow(Cell) - Method in class org.apache.hadoop.hbase.filter.WhileMatchFilter</dt>
+<dd> </dd>
<dt>getHistogram() - Method in interface org.apache.hadoop.hbase.metrics.Timer</dt>
<dd> </dd>
<dt>getHistogramReport(Histogram) - Static method in class org.apache.hadoop.hbase.util.YammerHistogramUtils</dt>
@@ -33172,6 +33186,10 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt>getSkipBadLines() - Method in class org.apache.hadoop.hbase.mapreduce.TsvImporterTextMapper</dt>
<dd> </dd>
+<dt>getSkipHint(Cell) - Method in class org.apache.hadoop.hbase.filter.ColumnPrefixFilter</dt>
+<dd> </dd>
+<dt>getSkipHint(Cell) - Method in class org.apache.hadoop.hbase.filter.ColumnRangeFilter</dt>
+<dd> </dd>
<dt>getSkipHint(Cell) - Method in class org.apache.hadoop.hbase.filter.Filter</dt>
<dd>
<div class="block">Provides a seek hint for cells that are structurally skipped by the scan pipeline
@@ -33181,11 +33199,27 @@ loadScripts(document, 'script');</script>
<dd>
<div class="block">Filters that cannot provide a structural-skip seek hint can inherit this no-op implementation.</div>
</dd>
+<dt>getSkipHint(Cell) - Method in class org.apache.hadoop.hbase.filter.FilterList</dt>
+<dd> </dd>
+<dt>getSkipHint(Cell) - Method in class org.apache.hadoop.hbase.filter.FilterListWithAND</dt>
+<dd>
+<div class="block">Maximal step: return the farthest skip hint among sub-filters.</div>
+</dd>
+<dt>getSkipHint(Cell) - Method in class org.apache.hadoop.hbase.filter.FilterListWithOR</dt>
+<dd>
+<div class="block">Minimal step: return the nearest skip hint.</div>
+</dd>
<dt>getSkipHint(Cell) - Method in class org.apache.hadoop.hbase.filter.FilterWrapper</dt>
<dd>
<div class="block">Delegates to the wrapped filter's <code>Filter.getSkipHint(Cell)</code> so that the scan pipeline
can seek ahead when a cell is structurally skipped before <code>filterCell</code> is reached.</div>
</dd>
+<dt>getSkipHint(Cell) - Method in class org.apache.hadoop.hbase.filter.MultipleColumnPrefixFilter</dt>
+<dd> </dd>
+<dt>getSkipHint(Cell) - Method in class org.apache.hadoop.hbase.filter.SkipFilter</dt>
+<dd> </dd>
+<dt>getSkipHint(Cell) - Method in class org.apache.hadoop.hbase.filter.WhileMatchFilter</dt>
+<dd> </dd>
<dt>getSkippingRow() - Method in class org.apache.hadoop.hbase.regionserver.ScannerContext</dt>
<dd>
<div class="block">In this mode, only block size progress is tracked, and limits are ignored.</div>
diff --git a/apidocs/member-search-index.js b/apidocs/member-search-index.js
index 2c2daf88a92..c132fd0f0b4 100644
--- a/apidocs/member-search-index.js
+++ b/apidocs/member-search-index.js
@@ -1 +1 @@
-memberSearchIndex = [{"p":"org.apache.hadoop.hbase.filter","c":"ParseConstants","l":"A"},{"p":"org.apache.hadoop.hbase.master","c":"RegionState.State","l":"ABNORMALLY_CLOSED"},{"p":"org.apache.hadoop.hbase.coprocessor","c":"CoprocessorHost","l":"ABORT_ON_ERROR_KEY"},{"p":"org.apache.hadoop.hdfs","c":"DummyDFSOutputStream","l":"abort()"},{"p":"org.apache.hadoop.hbase","c":"Abortable","l":"abort(String)","u":"abort(java.lang.String)"},{"p":"org.apache.hadoop.hbase","c":"Abortable","l":"abo [...]
\ No newline at end of file
+memberSearchIndex = [{"p":"org.apache.hadoop.hbase.filter","c":"ParseConstants","l":"A"},{"p":"org.apache.hadoop.hbase.master","c":"RegionState.State","l":"ABNORMALLY_CLOSED"},{"p":"org.apache.hadoop.hbase.coprocessor","c":"CoprocessorHost","l":"ABORT_ON_ERROR_KEY"},{"p":"org.apache.hadoop.hdfs","c":"DummyDFSOutputStream","l":"abort()"},{"p":"org.apache.hadoop.hbase","c":"Abortable","l":"abort(String)","u":"abort(java.lang.String)"},{"p":"org.apache.hadoop.hbase","c":"Abortable","l":"abo [...]
\ No newline at end of file
diff --git a/apidocs/org/apache/hadoop/hbase/class-use/Cell.html b/apidocs/org/apache/hadoop/hbase/class-use/Cell.html
index aee5f1eb4ba..92e767fb06b 100644
--- a/apidocs/org/apache/hadoop/hbase/class-use/Cell.html
+++ b/apidocs/org/apache/hadoop/hbase/class-use/Cell.html
@@ -1377,72 +1377,110 @@ service.</div>
implementation.</div>
</div>
<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">FilterWrapper.</span><code>getHintForRejectedRow<wbr>(org.apache.hadoop.hbase.Cell firstRowCell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterList.</span><code>getHintForRejectedRow<wbr>(org.apache.hadoop.hbase.Cell firstRowCell)</code></div>
+<div class="col-last even-row-color"> </div>
+<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterListWithAND.</span><code>getHintForRejectedRow<wbr>(org.apache.hadoop.hbase.Cell firstRowCell)</code></div>
+<div class="col-last odd-row-color">
+<div class="block">Maximal step: return the farthest hint among sub-filters that actually rejected the row.</div>
+</div>
+<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterListWithOR.</span><code>getHintForRejectedRow<wbr>(org.apache.hadoop.hbase.Cell firstRowCell)</code></div>
<div class="col-last even-row-color">
+<div class="block">Minimal step: return the nearest hint.</div>
+</div>
+<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterWrapper.</span><code>getHintForRejectedRow<wbr>(org.apache.hadoop.hbase.Cell firstRowCell)</code></div>
+<div class="col-last odd-row-color">
<div class="block">Delegates to the wrapped filter's <code>Filter.getHintForRejectedRow(Cell)</code> so that the scan
pipeline can seek directly past a rejected row rather than iterating cell-by-cell via
<code>nextRow()</code>.</div>
</div>
+<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">SkipFilter.</span><code>getHintForRejectedRow<wbr>(org.apache.hadoop.hbase.Cell firstRowCell)</code></div>
+<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">ColumnPaginationFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell cell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">WhileMatchFilter.</span><code>getHintForRejectedRow<wbr>(org.apache.hadoop.hbase.Cell firstRowCell)</code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">ColumnPrefixFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell cell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">ColumnPaginationFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell cell)</code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">ColumnRangeFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell cell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">ColumnPrefixFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell cell)</code></div>
<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>abstract org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">Filter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
-<div class="col-last even-row-color">
+<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">ColumnRangeFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell cell)</code></div>
+<div class="col-last even-row-color"> </div>
+<div class="col-first odd-row-color"><code>abstract org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">Filter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
+<div class="col-last odd-row-color">
<div class="block">If the filter returns the match code SEEK_NEXT_USING_HINT, then it should also tell which is
the next key it must seek to.</div>
</div>
-<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">FilterBase.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
-<div class="col-last odd-row-color">
+<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterBase.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
+<div class="col-last even-row-color">
<div class="block">Filters that are not sure which key must be next seeked to, can inherit this implementation
that, by default, returns a null Cell.</div>
</div>
+<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterList.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
+<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">FilterList.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterListWithAND.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">FilterListWithAND.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterListWithOR.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">FilterListWithOR.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterWrapper.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">FilterWrapper.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FuzzyRowFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">FuzzyRowFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">MultipleColumnPrefixFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell cell)</code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">MultipleColumnPrefixFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell cell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">MultiRowRangeFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentKV)</code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">MultiRowRangeFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentKV)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">PrefixFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell cell)</code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">PrefixFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell cell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TimestampsFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
+<div class="col-last odd-row-color">
+<div class="block">Pick the next cell that the scanner should seek to.</div>
+</div>
+<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">ColumnPrefixFilter.</span><code>getSkipHint<wbr>(org.apache.hadoop.hbase.Cell skippedCell)</code></div>
+<div class="col-last even-row-color"> </div>
+<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">ColumnRangeFilter.</span><code>getSkipHint<wbr>(org.apache.hadoop.hbase.Cell skippedCell)</code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TimestampsFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">Filter.</span><code>getSkipHint<wbr>(org.apache.hadoop.hbase.Cell skippedCell)</code></div>
<div class="col-last even-row-color">
-<div class="block">Pick the next cell that the scanner should seek to.</div>
+<div class="block">Provides a seek hint for cells that are structurally skipped by the scan pipeline
+ <em>before</em> <code>Filter.filterCell(Cell)</code> is ever reached.</div>
</div>
<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">Filter.</span><code>getSkipHint<wbr>(org.apache.hadoop.hbase.Cell skippedCell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterBase.</span><code>getSkipHint<wbr>(org.apache.hadoop.hbase.Cell skippedCell)</code></div>
<div class="col-last odd-row-color">
-<div class="block">Provides a seek hint for cells that are structurally skipped by the scan pipeline
- <em>before</em> <code>Filter.filterCell(Cell)</code> is ever reached.</div>
+<div class="block">Filters that cannot provide a structural-skip seek hint can inherit this no-op implementation.</div>
+</div>
+<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterList.</span><code>getSkipHint<wbr>(org.apache.hadoop.hbase.Cell skippedCell)</code></div>
+<div class="col-last even-row-color"> </div>
+<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterListWithAND.</span><code>getSkipHint<wbr>(org.apache.hadoop.hbase.Cell skippedCell)</code></div>
+<div class="col-last odd-row-color">
+<div class="block">Maximal step: return the farthest skip hint among sub-filters.</div>
</div>
<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">FilterBase.</span><code>getSkipHint<wbr>(org.apache.hadoop.hbase.Cell skippedCell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterListWithOR.</span><code>getSkipHint<wbr>(org.apache.hadoop.hbase.Cell skippedCell)</code></div>
<div class="col-last even-row-color">
-<div class="block">Filters that cannot provide a structural-skip seek hint can inherit this no-op implementation.</div>
+<div class="block">Minimal step: return the nearest skip hint.</div>
</div>
<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
<div class="col-second odd-row-color"><span class="type-name-label">FilterWrapper.</span><code>getSkipHint<wbr>(org.apache.hadoop.hbase.Cell skippedCell)</code></div>
@@ -1450,36 +1488,45 @@ service.</div>
<div class="block">Delegates to the wrapped filter's <code>Filter.getSkipHint(Cell)</code> so that the scan pipeline
can seek ahead when a cell is structurally skipped before <code>filterCell</code> is reached.</div>
</div>
-<div class="col-first even-row-color"><code>abstract org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">Filter.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell v)</code></div>
-<div class="col-last even-row-color">
-<div class="block">Give the filter a chance to transform the passed Cell.</div>
-</div>
+<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">MultipleColumnPrefixFilter.</span><code>getSkipHint<wbr>(org.apache.hadoop.hbase.Cell skippedCell)</code></div>
+<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">FilterBase.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell v)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">SkipFilter.</span><code>getSkipHint<wbr>(org.apache.hadoop.hbase.Cell skippedCell)</code></div>
+<div class="col-last odd-row-color"> </div>
+<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">WhileMatchFilter.</span><code>getSkipHint<wbr>(org.apache.hadoop.hbase.Cell skippedCell)</code></div>
+<div class="col-last even-row-color"> </div>
+<div class="col-first odd-row-color"><code>abstract org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">Filter.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell v)</code></div>
<div class="col-last odd-row-color">
-<div class="block">By default no transformation takes place Give the filter a chance to transform the passed Cell.</div>
+<div class="block">Give the filter a chance to transform the passed Cell.</div>
</div>
<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">FilterList.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell c)</code></div>
-<div class="col-last even-row-color"> </div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterBase.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell v)</code></div>
+<div class="col-last even-row-color">
+<div class="block">By default no transformation takes place Give the filter a chance to transform the passed Cell.</div>
+</div>
<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">FilterListBase.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell c)</code></div>
-<div class="col-last odd-row-color">
+<div class="col-second odd-row-color"><span class="type-name-label">FilterList.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell c)</code></div>
+<div class="col-last odd-row-color"> </div>
+<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterListBase.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell c)</code></div>
+<div class="col-last even-row-color">
<div class="block">For FilterList, we can consider a filter list as a node in a tree.</div>
</div>
-<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">FilterWrapper.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell v)</code></div>
-<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">KeyOnlyFilter.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell cell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterWrapper.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell v)</code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">SkipFilter.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell v)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">KeyOnlyFilter.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell cell)</code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">WhileMatchFilter.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell v)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">SkipFilter.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell v)</code></div>
<div class="col-last odd-row-color"> </div>
+<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">WhileMatchFilter.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell v)</code></div>
+<div class="col-last even-row-color"> </div>
</div>
<div class="caption"><span>Methods in <a href="../filter/package-summary.html">org.apache.hadoop.hbase.filter</a> with parameters of type org.apache.hadoop.hbase.Cell in in </span></div>
<div class="summary-table three-column-summary">
@@ -1698,72 +1745,110 @@ service.</div>
implementation.</div>
</div>
<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">FilterWrapper.</span><code>getHintForRejectedRow<wbr>(org.apache.hadoop.hbase.Cell firstRowCell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterList.</span><code>getHintForRejectedRow<wbr>(org.apache.hadoop.hbase.Cell firstRowCell)</code></div>
+<div class="col-last even-row-color"> </div>
+<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterListWithAND.</span><code>getHintForRejectedRow<wbr>(org.apache.hadoop.hbase.Cell firstRowCell)</code></div>
+<div class="col-last odd-row-color">
+<div class="block">Maximal step: return the farthest hint among sub-filters that actually rejected the row.</div>
+</div>
+<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterListWithOR.</span><code>getHintForRejectedRow<wbr>(org.apache.hadoop.hbase.Cell firstRowCell)</code></div>
<div class="col-last even-row-color">
+<div class="block">Minimal step: return the nearest hint.</div>
+</div>
+<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterWrapper.</span><code>getHintForRejectedRow<wbr>(org.apache.hadoop.hbase.Cell firstRowCell)</code></div>
+<div class="col-last odd-row-color">
<div class="block">Delegates to the wrapped filter's <code>Filter.getHintForRejectedRow(Cell)</code> so that the scan
pipeline can seek directly past a rejected row rather than iterating cell-by-cell via
<code>nextRow()</code>.</div>
</div>
+<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">SkipFilter.</span><code>getHintForRejectedRow<wbr>(org.apache.hadoop.hbase.Cell firstRowCell)</code></div>
+<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">ColumnPaginationFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell cell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">WhileMatchFilter.</span><code>getHintForRejectedRow<wbr>(org.apache.hadoop.hbase.Cell firstRowCell)</code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">ColumnPrefixFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell cell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">ColumnPaginationFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell cell)</code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">ColumnRangeFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell cell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">ColumnPrefixFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell cell)</code></div>
<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>abstract org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">Filter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
-<div class="col-last even-row-color">
+<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">ColumnRangeFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell cell)</code></div>
+<div class="col-last even-row-color"> </div>
+<div class="col-first odd-row-color"><code>abstract org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">Filter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
+<div class="col-last odd-row-color">
<div class="block">If the filter returns the match code SEEK_NEXT_USING_HINT, then it should also tell which is
the next key it must seek to.</div>
</div>
-<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">FilterBase.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
-<div class="col-last odd-row-color">
+<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterBase.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
+<div class="col-last even-row-color">
<div class="block">Filters that are not sure which key must be next seeked to, can inherit this implementation
that, by default, returns a null Cell.</div>
</div>
+<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterList.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
+<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">FilterList.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterListWithAND.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">FilterListWithAND.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterListWithOR.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">FilterListWithOR.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterWrapper.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">FilterWrapper.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FuzzyRowFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">FuzzyRowFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">MultipleColumnPrefixFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell cell)</code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">MultipleColumnPrefixFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell cell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">MultiRowRangeFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentKV)</code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">MultiRowRangeFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentKV)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">PrefixFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell cell)</code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">PrefixFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell cell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TimestampsFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
+<div class="col-last odd-row-color">
+<div class="block">Pick the next cell that the scanner should seek to.</div>
+</div>
+<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">ColumnPrefixFilter.</span><code>getSkipHint<wbr>(org.apache.hadoop.hbase.Cell skippedCell)</code></div>
+<div class="col-last even-row-color"> </div>
+<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">ColumnRangeFilter.</span><code>getSkipHint<wbr>(org.apache.hadoop.hbase.Cell skippedCell)</code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TimestampsFilter.</span><code>getNextCellHint<wbr>(org.apache.hadoop.hbase.Cell currentCell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">Filter.</span><code>getSkipHint<wbr>(org.apache.hadoop.hbase.Cell skippedCell)</code></div>
<div class="col-last even-row-color">
-<div class="block">Pick the next cell that the scanner should seek to.</div>
+<div class="block">Provides a seek hint for cells that are structurally skipped by the scan pipeline
+ <em>before</em> <code>Filter.filterCell(Cell)</code> is ever reached.</div>
</div>
<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">Filter.</span><code>getSkipHint<wbr>(org.apache.hadoop.hbase.Cell skippedCell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterBase.</span><code>getSkipHint<wbr>(org.apache.hadoop.hbase.Cell skippedCell)</code></div>
<div class="col-last odd-row-color">
-<div class="block">Provides a seek hint for cells that are structurally skipped by the scan pipeline
- <em>before</em> <code>Filter.filterCell(Cell)</code> is ever reached.</div>
+<div class="block">Filters that cannot provide a structural-skip seek hint can inherit this no-op implementation.</div>
+</div>
+<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterList.</span><code>getSkipHint<wbr>(org.apache.hadoop.hbase.Cell skippedCell)</code></div>
+<div class="col-last even-row-color"> </div>
+<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterListWithAND.</span><code>getSkipHint<wbr>(org.apache.hadoop.hbase.Cell skippedCell)</code></div>
+<div class="col-last odd-row-color">
+<div class="block">Maximal step: return the farthest skip hint among sub-filters.</div>
</div>
<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">FilterBase.</span><code>getSkipHint<wbr>(org.apache.hadoop.hbase.Cell skippedCell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterListWithOR.</span><code>getSkipHint<wbr>(org.apache.hadoop.hbase.Cell skippedCell)</code></div>
<div class="col-last even-row-color">
-<div class="block">Filters that cannot provide a structural-skip seek hint can inherit this no-op implementation.</div>
+<div class="block">Minimal step: return the nearest skip hint.</div>
</div>
<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
<div class="col-second odd-row-color"><span class="type-name-label">FilterWrapper.</span><code>getSkipHint<wbr>(org.apache.hadoop.hbase.Cell skippedCell)</code></div>
@@ -1771,36 +1856,45 @@ service.</div>
<div class="block">Delegates to the wrapped filter's <code>Filter.getSkipHint(Cell)</code> so that the scan pipeline
can seek ahead when a cell is structurally skipped before <code>filterCell</code> is reached.</div>
</div>
-<div class="col-first even-row-color"><code>abstract org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">Filter.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell v)</code></div>
-<div class="col-last even-row-color">
-<div class="block">Give the filter a chance to transform the passed Cell.</div>
-</div>
+<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">MultipleColumnPrefixFilter.</span><code>getSkipHint<wbr>(org.apache.hadoop.hbase.Cell skippedCell)</code></div>
+<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">FilterBase.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell v)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">SkipFilter.</span><code>getSkipHint<wbr>(org.apache.hadoop.hbase.Cell skippedCell)</code></div>
+<div class="col-last odd-row-color"> </div>
+<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">WhileMatchFilter.</span><code>getSkipHint<wbr>(org.apache.hadoop.hbase.Cell skippedCell)</code></div>
+<div class="col-last even-row-color"> </div>
+<div class="col-first odd-row-color"><code>abstract org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">Filter.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell v)</code></div>
<div class="col-last odd-row-color">
-<div class="block">By default no transformation takes place Give the filter a chance to transform the passed Cell.</div>
+<div class="block">Give the filter a chance to transform the passed Cell.</div>
</div>
<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">FilterList.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell c)</code></div>
-<div class="col-last even-row-color"> </div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterBase.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell v)</code></div>
+<div class="col-last even-row-color">
+<div class="block">By default no transformation takes place Give the filter a chance to transform the passed Cell.</div>
+</div>
<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">FilterListBase.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell c)</code></div>
-<div class="col-last odd-row-color">
+<div class="col-second odd-row-color"><span class="type-name-label">FilterList.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell c)</code></div>
+<div class="col-last odd-row-color"> </div>
+<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterListBase.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell c)</code></div>
+<div class="col-last even-row-color">
<div class="block">For FilterList, we can consider a filter list as a node in a tree.</div>
</div>
-<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">FilterWrapper.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell v)</code></div>
-<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">KeyOnlyFilter.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell cell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterWrapper.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell v)</code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">SkipFilter.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell v)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">KeyOnlyFilter.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell cell)</code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">WhileMatchFilter.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell v)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">SkipFilter.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell v)</code></div>
<div class="col-last odd-row-color"> </div>
+<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.Cell</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">WhileMatchFilter.</span><code>transformCell<wbr>(org.apache.hadoop.hbase.Cell v)</code></div>
+<div class="col-last even-row-color"> </div>
</div>
<div class="caption"><span>Method parameters in <a href="../filter/package-summary.html">org.apache.hadoop.hbase.filter</a> with type arguments of type org.apache.hadoop.hbase.Cell in in </span></div>
<div class="summary-table three-column-summary">
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/filter/ColumnPrefixFilter.html b/apidocs/src-html/org/apache/hadoop/hbase/filter/ColumnPrefixFilter.html
index e23e4d9d48e..09d92770cbc 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/filter/ColumnPrefixFilter.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/filter/ColumnPrefixFilter.html
@@ -162,20 +162,28 @@
<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"> @Override</span>
-<span class="source-line-no">152</span><span id="line-152"> public String toString() {</span>
-<span class="source-line-no">153</span><span id="line-153"> return this.getClass().getSimpleName() + " " + Bytes.toStringBinary(this.prefix);</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"> @Override</span>
-<span class="source-line-no">157</span><span id="line-157"> public boolean equals(Object obj) {</span>
-<span class="source-line-no">158</span><span id="line-158"> return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);</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"> @Override</span>
-<span class="source-line-no">162</span><span id="line-162"> public int hashCode() {</span>
-<span class="source-line-no">163</span><span id="line-163"> return Bytes.hashCode(this.getPrefix());</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">152</span><span id="line-152"> public Cell getSkipHint(Cell skippedCell) throws IOException {</span>
+<span class="source-line-no">153</span><span id="line-153"> if (this.prefix == null) {</span>
+<span class="source-line-no">154</span><span id="line-154"> return null;</span>
+<span class="source-line-no">155</span><span id="line-155"> }</span>
+<span class="source-line-no">156</span><span id="line-156"> return getNextCellHint(skippedCell);</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"> @Override</span>
+<span class="source-line-no">160</span><span id="line-160"> public String toString() {</span>
+<span class="source-line-no">161</span><span id="line-161"> return this.getClass().getSimpleName() + " " + Bytes.toStringBinary(this.prefix);</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"> @Override</span>
+<span class="source-line-no">165</span><span id="line-165"> public boolean equals(Object obj) {</span>
+<span class="source-line-no">166</span><span id="line-166"> return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);</span>
+<span class="source-line-no">167</span><span id="line-167"> }</span>
+<span class="source-line-no">168</span><span id="line-168"></span>
+<span class="source-line-no">169</span><span id="line-169"> @Override</span>
+<span class="source-line-no">170</span><span id="line-170"> public int hashCode() {</span>
+<span class="source-line-no">171</span><span id="line-171"> return Bytes.hashCode(this.getPrefix());</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>
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/filter/ColumnRangeFilter.html b/apidocs/src-html/org/apache/hadoop/hbase/filter/ColumnRangeFilter.html
index 5c4892d91f3..ad3a0ca9cfc 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/filter/ColumnRangeFilter.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/filter/ColumnRangeFilter.html
@@ -214,23 +214,31 @@
<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"> @Override</span>
-<span class="source-line-no">204</span><span id="line-204"> public String toString() {</span>
-<span class="source-line-no">205</span><span id="line-205"> return this.getClass().getSimpleName() + " " + (this.minColumnInclusive ? "[" : "(")</span>
-<span class="source-line-no">206</span><span id="line-206"> + Bytes.toStringBinary(this.minColumn) + ", " + Bytes.toStringBinary(this.maxColumn)</span>
-<span class="source-line-no">207</span><span id="line-207"> + (this.maxColumnInclusive ? "]" : ")");</span>
-<span class="source-line-no">208</span><span id="line-208"> }</span>
-<span class="source-line-no">209</span><span id="line-209"></span>
-<span class="source-line-no">210</span><span id="line-210"> @Override</span>
-<span class="source-line-no">211</span><span id="line-211"> public boolean equals(Object obj) {</span>
-<span class="source-line-no">212</span><span id="line-212"> return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);</span>
-<span class="source-line-no">213</span><span id="line-213"> }</span>
-<span class="source-line-no">214</span><span id="line-214"></span>
-<span class="source-line-no">215</span><span id="line-215"> @Override</span>
-<span class="source-line-no">216</span><span id="line-216"> public int hashCode() {</span>
-<span class="source-line-no">217</span><span id="line-217"> return Objects.hash(Bytes.hashCode(getMinColumn()), getMinColumnInclusive(),</span>
-<span class="source-line-no">218</span><span id="line-218"> Bytes.hashCode(getMaxColumn()), getMaxColumnInclusive());</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">204</span><span id="line-204"> public Cell getSkipHint(Cell skippedCell) throws IOException {</span>
+<span class="source-line-no">205</span><span id="line-205"> if (this.minColumn == null) {</span>
+<span class="source-line-no">206</span><span id="line-206"> return null;</span>
+<span class="source-line-no">207</span><span id="line-207"> }</span>
+<span class="source-line-no">208</span><span id="line-208"> return getNextCellHint(skippedCell);</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"> @Override</span>
+<span class="source-line-no">212</span><span id="line-212"> public String toString() {</span>
+<span class="source-line-no">213</span><span id="line-213"> return this.getClass().getSimpleName() + " " + (this.minColumnInclusive ? "[" : "(")</span>
+<span class="source-line-no">214</span><span id="line-214"> + Bytes.toStringBinary(this.minColumn) + ", " + Bytes.toStringBinary(this.maxColumn)</span>
+<span class="source-line-no">215</span><span id="line-215"> + (this.maxColumnInclusive ? "]" : ")");</span>
+<span class="source-line-no">216</span><span id="line-216"> }</span>
+<span class="source-line-no">217</span><span id="line-217"></span>
+<span class="source-line-no">218</span><span id="line-218"> @Override</span>
+<span class="source-line-no">219</span><span id="line-219"> public boolean equals(Object obj) {</span>
+<span class="source-line-no">220</span><span id="line-220"> return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);</span>
+<span class="source-line-no">221</span><span id="line-221"> }</span>
+<span class="source-line-no">222</span><span id="line-222"></span>
+<span class="source-line-no">223</span><span id="line-223"> @Override</span>
+<span class="source-line-no">224</span><span id="line-224"> public int hashCode() {</span>
+<span class="source-line-no">225</span><span id="line-225"> return Objects.hash(Bytes.hashCode(getMinColumn()), getMinColumnInclusive(),</span>
+<span class="source-line-no">226</span><span id="line-226"> Bytes.hashCode(getMaxColumn()), getMaxColumnInclusive());</span>
+<span class="source-line-no">227</span><span id="line-227"> }</span>
+<span class="source-line-no">228</span><span id="line-228">}</span>
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/filter/Filter.ReturnCode.html b/apidocs/src-html/org/apache/hadoop/hbase/filter/Filter.ReturnCode.html
index d4ec9c51692..fb335c4f5ae 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/filter/Filter.ReturnCode.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/filter/Filter.ReturnCode.html
@@ -229,112 +229,118 @@
<span class="source-line-no">216</span><span id="line-216"> * must point to a <em>smaller</em> row key (earlier in reverse-scan direction). The scanner</span>
<span class="source-line-no">217</span><span id="line-217"> * validates hint direction and falls back to {@code nextRow()} if the hint does not advance in</span>
<span class="source-line-no">218</span><span id="line-218"> * the scan direction.</li></span>
-<span class="source-line-no">219</span><span id="line-219"> * <li><strong>Composite filter limitation:</strong> {@code FilterList}, {@code SkipFilter}, and</span>
-<span class="source-line-no">220</span><span id="line-220"> * {@code WhileMatchFilter} do not currently delegate this method to wrapped sub-filters. Hints</span>
-<span class="source-line-no">221</span><span id="line-221"> * from filters used inside these wrappers will be silently ignored.</li></span>
-<span class="source-line-no">222</span><span id="line-222"> * </ul></span>
-<span class="source-line-no">223</span><span id="line-223"> * @param firstRowCell the first cell encountered in the rejected row; contains the row key that</span>
-<span class="source-line-no">224</span><span id="line-224"> * was passed to {@code filterRowKey}</span>
-<span class="source-line-no">225</span><span id="line-225"> * @return a {@link Cell} representing the earliest position the scanner should seek to, or</span>
-<span class="source-line-no">226</span><span id="line-226"> * {@code null} if this filter cannot provide a better position than a sequential skip</span>
-<span class="source-line-no">227</span><span id="line-227"> * @throws IOException in case an I/O or filter-specific failure needs to be signaled</span>
-<span class="source-line-no">228</span><span id="line-228"> * @see #filterRowKey(Cell)</span>
-<span class="source-line-no">229</span><span id="line-229"> */</span>
-<span class="source-line-no">230</span><span id="line-230"> public Cell getHintForRejectedRow(final Cell firstRowCell) throws IOException {</span>
-<span class="source-line-no">231</span><span id="line-231"> return null;</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"> /**</span>
-<span class="source-line-no">235</span><span id="line-235"> * Provides a seek hint for cells that are structurally skipped by the scan pipeline</span>
-<span class="source-line-no">236</span><span id="line-236"> * <em>before</em> {@link #filterCell(Cell)} is ever reached. The pipeline short-circuits on</span>
-<span class="source-line-no">237</span><span id="line-237"> * several criteria — time-range mismatch, column-set exclusion, and version-limit exhaustion —</span>
-<span class="source-line-no">238</span><span id="line-238"> * and in each case the filter is bypassed entirely. When an implementation can compute a</span>
-<span class="source-line-no">239</span><span id="line-239"> * meaningful forward position purely from the cell's coordinates (without needing the</span>
-<span class="source-line-no">240</span><span id="line-240"> * {@code filterCell} call sequence), it should return that position here so the scanner can seek</span>
-<span class="source-line-no">241</span><span id="line-241"> * ahead instead of advancing one cell at a time.</span>
-<span class="source-line-no">242</span><span id="line-242"> * <p></span>
-<span class="source-line-no">243</span><span id="line-243"> * Contract:</span>
-<span class="source-line-no">244</span><span id="line-244"> * <ul></span>
-<span class="source-line-no">245</span><span id="line-245"> * <li>May be called for cells that have <strong>never</strong> been passed to</span>
-<span class="source-line-no">246</span><span id="line-246"> * {@link #filterCell(Cell)}.</li></span>
-<span class="source-line-no">247</span><span id="line-247"> * <li>Implementations <strong>must not</strong> modify any filter state; this method is treated</span>
-<span class="source-line-no">248</span><span id="line-248"> * as logically stateless. Only filters whose hint computation is based solely on immutable</span>
-<span class="source-line-no">249</span><span id="line-249"> * configuration (e.g. a fixed column range or a fuzzy-row pattern) should override this.</li></span>
-<span class="source-line-no">250</span><span id="line-250"> * <li>The returned {@link Cell}, if non-null, must be an</span>
-<span class="source-line-no">251</span><span id="line-251"> * {@link org.apache.hadoop.hbase.ExtendedCell} because filters are evaluated on the server</span>
-<span class="source-line-no">252</span><span id="line-252"> * side.</li></span>
-<span class="source-line-no">253</span><span id="line-253"> * <li>Returning {@code null} (the default) falls through to the existing structural skip/seek</span>
-<span class="source-line-no">254</span><span id="line-254"> * behaviour, preserving full backward compatibility.</li></span>
-<span class="source-line-no">255</span><span id="line-255"> * <li>For reversed scans, the returned cell must have a <em>smaller</em> row key (i.e., earlier</span>
-<span class="source-line-no">256</span><span id="line-256"> * in reverse-scan direction) than the {@code skippedCell}. Hints that do not advance in the scan</span>
-<span class="source-line-no">257</span><span id="line-257"> * direction are silently ignored.</li></span>
-<span class="source-line-no">258</span><span id="line-258"> * <li><strong>Composite filter limitation:</strong> {@code FilterList}, {@code SkipFilter}, and</span>
-<span class="source-line-no">259</span><span id="line-259"> * {@code WhileMatchFilter} do not currently delegate this method to wrapped sub-filters. Hints</span>
-<span class="source-line-no">260</span><span id="line-260"> * from filters used inside these wrappers will be silently ignored.</li></span>
-<span class="source-line-no">261</span><span id="line-261"> * </ul></span>
-<span class="source-line-no">262</span><span id="line-262"> * @param skippedCell the cell that was rejected by the time-range, column, or version gate before</span>
-<span class="source-line-no">263</span><span id="line-263"> * {@code filterCell} could be consulted</span>
-<span class="source-line-no">264</span><span id="line-264"> * @return a {@link Cell} representing the earliest position the scanner should seek to, or</span>
-<span class="source-line-no">265</span><span id="line-265"> * {@code null} if this filter cannot provide a better position than the structural hint</span>
-<span class="source-line-no">266</span><span id="line-266"> * @throws IOException in case an I/O or filter-specific failure needs to be signaled</span>
-<span class="source-line-no">267</span><span id="line-267"> * @see #filterCell(Cell)</span>
-<span class="source-line-no">268</span><span id="line-268"> * @see #getNextCellHint(Cell)</span>
-<span class="source-line-no">269</span><span id="line-269"> */</span>
-<span class="source-line-no">270</span><span id="line-270"> public Cell getSkipHint(final Cell skippedCell) throws IOException {</span>
-<span class="source-line-no">271</span><span id="line-271"> return null;</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"> * Check that given column family is essential for filter to check row. Most filters always return</span>
-<span class="source-line-no">276</span><span id="line-276"> * true here. But some could have more sophisticated logic which could significantly reduce</span>
-<span class="source-line-no">277</span><span id="line-277"> * scanning process by not even touching columns until we are 100% sure that it's data is needed</span>
-<span class="source-line-no">278</span><span id="line-278"> * in result. Concrete implementers can signal a failure condition in their code by throwing an</span>
-<span class="source-line-no">279</span><span id="line-279"> * {@link IOException}.</span>
-<span class="source-line-no">280</span><span id="line-280"> * @throws IOException in case an I/O or an filter specific failure needs to be signaled.</span>
-<span class="source-line-no">281</span><span id="line-281"> */</span>
-<span class="source-line-no">282</span><span id="line-282"> abstract public boolean isFamilyEssential(byte[] name) throws IOException;</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"> * TODO: JAVADOC Concrete implementers can signal a failure condition in their code by throwing an</span>
-<span class="source-line-no">286</span><span id="line-286"> * {@link IOException}.</span>
-<span class="source-line-no">287</span><span id="line-287"> * @return The filter serialized using pb</span>
-<span class="source-line-no">288</span><span id="line-288"> * @throws IOException in case an I/O or an filter specific failure needs to be signaled.</span>
-<span class="source-line-no">289</span><span id="line-289"> */</span>
-<span class="source-line-no">290</span><span id="line-290"> abstract public byte[] toByteArray() throws IOException;</span>
-<span class="source-line-no">291</span><span id="line-291"></span>
-<span class="source-line-no">292</span><span id="line-292"> /**</span>
-<span class="source-line-no">293</span><span id="line-293"> * Concrete implementers can signal a failure condition in their code by throwing an</span>
-<span class="source-line-no">294</span><span id="line-294"> * {@link IOException}.</span>
-<span class="source-line-no">295</span><span id="line-295"> * @param pbBytes A pb serialized {@link Filter} instance</span>
-<span class="source-line-no">296</span><span id="line-296"> * @return An instance of {@link Filter} made from <code>bytes</code></span>
-<span class="source-line-no">297</span><span id="line-297"> * @throws DeserializationException if an error occurred</span>
-<span class="source-line-no">298</span><span id="line-298"> * @see #toByteArray</span>
-<span class="source-line-no">299</span><span id="line-299"> */</span>
-<span class="source-line-no">300</span><span id="line-300"> public static Filter parseFrom(final byte[] pbBytes) throws DeserializationException {</span>
-<span class="source-line-no">301</span><span id="line-301"> throw new DeserializationException(</span>
-<span class="source-line-no">302</span><span id="line-302"> "parseFrom called on base Filter, but should be called on derived type");</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"> * Concrete implementers can signal a failure condition in their code by throwing an</span>
-<span class="source-line-no">307</span><span id="line-307"> * {@link IOException}.</span>
-<span class="source-line-no">308</span><span id="line-308"> * @return true if and only if the fields of the filter that are serialized are equal to the</span>
-<span class="source-line-no">309</span><span id="line-309"> * corresponding fields in other. Used for testing.</span>
-<span class="source-line-no">310</span><span id="line-310"> */</span>
-<span class="source-line-no">311</span><span id="line-311"> abstract boolean areSerializedFieldsEqual(Filter other);</span>
-<span class="source-line-no">312</span><span id="line-312"></span>
-<span class="source-line-no">313</span><span id="line-313"> /**</span>
-<span class="source-line-no">314</span><span id="line-314"> * alter the reversed scan flag</span>
-<span class="source-line-no">315</span><span id="line-315"> * @param reversed flag</span>
+<span class="source-line-no">219</span><span id="line-219"> * <li><strong>Composite filter support:</strong> {@code FilterList} (both {@code MUST_PASS_ALL}</span>
+<span class="source-line-no">220</span><span id="line-220"> * and {@code MUST_PASS_ONE}), {@code SkipFilter}, and {@code WhileMatchFilter} delegate this</span>
+<span class="source-line-no">221</span><span id="line-221"> * method to their sub-filters and merge the results. For AND ({@code MUST_PASS_ALL}), only</span>
+<span class="source-line-no">222</span><span id="line-222"> * sub-filters whose {@code filterRowKey} individually returned {@code true} are consulted, and</span>
+<span class="source-line-no">223</span><span id="line-223"> * the farthest (maximal-step) hint among them is returned. For OR ({@code MUST_PASS_ONE}), the</span>
+<span class="source-line-no">224</span><span id="line-224"> * nearest hint is returned only when every non-terminated sub-filter provides one — any null</span>
+<span class="source-line-no">225</span><span id="line-225"> * collapses the OR result to null.</li></span>
+<span class="source-line-no">226</span><span id="line-226"> * </ul></span>
+<span class="source-line-no">227</span><span id="line-227"> * @param firstRowCell the first cell encountered in the rejected row; contains the row key that</span>
+<span class="source-line-no">228</span><span id="line-228"> * was passed to {@code filterRowKey}</span>
+<span class="source-line-no">229</span><span id="line-229"> * @return a {@link Cell} representing the earliest position the scanner should seek to, or</span>
+<span class="source-line-no">230</span><span id="line-230"> * {@code null} if this filter cannot provide a better position than a sequential skip</span>
+<span class="source-line-no">231</span><span id="line-231"> * @throws IOException in case an I/O or filter-specific failure needs to be signaled</span>
+<span class="source-line-no">232</span><span id="line-232"> * @see #filterRowKey(Cell)</span>
+<span class="source-line-no">233</span><span id="line-233"> */</span>
+<span class="source-line-no">234</span><span id="line-234"> public Cell getHintForRejectedRow(final Cell firstRowCell) throws IOException {</span>
+<span class="source-line-no">235</span><span id="line-235"> return null;</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"> /**</span>
+<span class="source-line-no">239</span><span id="line-239"> * Provides a seek hint for cells that are structurally skipped by the scan pipeline</span>
+<span class="source-line-no">240</span><span id="line-240"> * <em>before</em> {@link #filterCell(Cell)} is ever reached. The pipeline short-circuits on</span>
+<span class="source-line-no">241</span><span id="line-241"> * several criteria — time-range mismatch, column-set exclusion, and version-limit exhaustion —</span>
+<span class="source-line-no">242</span><span id="line-242"> * and in each case the filter is bypassed entirely. When an implementation can compute a</span>
+<span class="source-line-no">243</span><span id="line-243"> * meaningful forward position purely from the cell's coordinates (without needing the</span>
+<span class="source-line-no">244</span><span id="line-244"> * {@code filterCell} call sequence), it should return that position here so the scanner can seek</span>
+<span class="source-line-no">245</span><span id="line-245"> * ahead instead of advancing one cell at a time.</span>
+<span class="source-line-no">246</span><span id="line-246"> * <p></span>
+<span class="source-line-no">247</span><span id="line-247"> * Contract:</span>
+<span class="source-line-no">248</span><span id="line-248"> * <ul></span>
+<span class="source-line-no">249</span><span id="line-249"> * <li>May be called for cells that have <strong>never</strong> been passed to</span>
+<span class="source-line-no">250</span><span id="line-250"> * {@link #filterCell(Cell)}.</li></span>
+<span class="source-line-no">251</span><span id="line-251"> * <li>Implementations <strong>must not</strong> modify any filter state; this method is treated</span>
+<span class="source-line-no">252</span><span id="line-252"> * as logically stateless. Only filters whose hint computation is based solely on immutable</span>
+<span class="source-line-no">253</span><span id="line-253"> * configuration (e.g. a fixed column range or a fuzzy-row pattern) should override this.</li></span>
+<span class="source-line-no">254</span><span id="line-254"> * <li>The returned {@link Cell}, if non-null, must be an</span>
+<span class="source-line-no">255</span><span id="line-255"> * {@link org.apache.hadoop.hbase.ExtendedCell} because filters are evaluated on the server</span>
+<span class="source-line-no">256</span><span id="line-256"> * side.</li></span>
+<span class="source-line-no">257</span><span id="line-257"> * <li>Returning {@code null} (the default) falls through to the existing structural skip/seek</span>
+<span class="source-line-no">258</span><span id="line-258"> * behaviour, preserving full backward compatibility.</li></span>
+<span class="source-line-no">259</span><span id="line-259"> * <li>For reversed scans, the returned cell must have a <em>smaller</em> row key (i.e., earlier</span>
+<span class="source-line-no">260</span><span id="line-260"> * in reverse-scan direction) than the {@code skippedCell}. Hints that do not advance in the scan</span>
+<span class="source-line-no">261</span><span id="line-261"> * direction are silently ignored.</li></span>
+<span class="source-line-no">262</span><span id="line-262"> * <li><strong>Composite filter support:</strong> {@code FilterList} (both {@code MUST_PASS_ALL}</span>
+<span class="source-line-no">263</span><span id="line-263"> * and {@code MUST_PASS_ONE}), {@code SkipFilter}, and {@code WhileMatchFilter} delegate this</span>
+<span class="source-line-no">264</span><span id="line-264"> * method to their sub-filters and merge the results (maximal step for AND; for OR, the nearest</span>
+<span class="source-line-no">265</span><span id="line-265"> * hint is returned only when every non-terminated sub-filter provides one — any null collapses</span>
+<span class="source-line-no">266</span><span id="line-266"> * the OR result to null).</li></span>
+<span class="source-line-no">267</span><span id="line-267"> * </ul></span>
+<span class="source-line-no">268</span><span id="line-268"> * @param skippedCell the cell that was rejected by the time-range, column, or version gate before</span>
+<span class="source-line-no">269</span><span id="line-269"> * {@code filterCell} could be consulted</span>
+<span class="source-line-no">270</span><span id="line-270"> * @return a {@link Cell} representing the earliest position the scanner should seek to, or</span>
+<span class="source-line-no">271</span><span id="line-271"> * {@code null} if this filter cannot provide a better position than the structural hint</span>
+<span class="source-line-no">272</span><span id="line-272"> * @throws IOException in case an I/O or filter-specific failure needs to be signaled</span>
+<span class="source-line-no">273</span><span id="line-273"> * @see #filterCell(Cell)</span>
+<span class="source-line-no">274</span><span id="line-274"> * @see #getNextCellHint(Cell)</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 Cell getSkipHint(final Cell skippedCell) throws IOException {</span>
+<span class="source-line-no">277</span><span id="line-277"> return null;</span>
+<span class="source-line-no">278</span><span id="line-278"> }</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"> * Check that given column family is essential for filter to check row. Most filters always return</span>
+<span class="source-line-no">282</span><span id="line-282"> * true here. But some could have more sophisticated logic which could significantly reduce</span>
+<span class="source-line-no">283</span><span id="line-283"> * scanning process by not even touching columns until we are 100% sure that it's data is needed</span>
+<span class="source-line-no">284</span><span id="line-284"> * in result. Concrete implementers can signal a failure condition in their code by throwing an</span>
+<span class="source-line-no">285</span><span id="line-285"> * {@link IOException}.</span>
+<span class="source-line-no">286</span><span id="line-286"> * @throws IOException in case an I/O or an filter specific failure needs to be signaled.</span>
+<span class="source-line-no">287</span><span id="line-287"> */</span>
+<span class="source-line-no">288</span><span id="line-288"> abstract public boolean isFamilyEssential(byte[] name) throws IOException;</span>
+<span class="source-line-no">289</span><span id="line-289"></span>
+<span class="source-line-no">290</span><span id="line-290"> /**</span>
+<span class="source-line-no">291</span><span id="line-291"> * TODO: JAVADOC Concrete implementers can signal a failure condition in their code by throwing an</span>
+<span class="source-line-no">292</span><span id="line-292"> * {@link IOException}.</span>
+<span class="source-line-no">293</span><span id="line-293"> * @return The filter serialized using pb</span>
+<span class="source-line-no">294</span><span id="line-294"> * @throws IOException in case an I/O or an filter specific failure needs to be signaled.</span>
+<span class="source-line-no">295</span><span id="line-295"> */</span>
+<span class="source-line-no">296</span><span id="line-296"> abstract public byte[] toByteArray() throws IOException;</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"> * Concrete implementers can signal a failure condition in their code by throwing an</span>
+<span class="source-line-no">300</span><span id="line-300"> * {@link IOException}.</span>
+<span class="source-line-no">301</span><span id="line-301"> * @param pbBytes A pb serialized {@link Filter} instance</span>
+<span class="source-line-no">302</span><span id="line-302"> * @return An instance of {@link Filter} made from <code>bytes</code></span>
+<span class="source-line-no">303</span><span id="line-303"> * @throws DeserializationException if an error occurred</span>
+<span class="source-line-no">304</span><span id="line-304"> * @see #toByteArray</span>
+<span class="source-line-no">305</span><span id="line-305"> */</span>
+<span class="source-line-no">306</span><span id="line-306"> public static Filter parseFrom(final byte[] pbBytes) throws DeserializationException {</span>
+<span class="source-line-no">307</span><span id="line-307"> throw new DeserializationException(</span>
+<span class="source-line-no">308</span><span id="line-308"> "parseFrom called on base Filter, but should be called on derived type");</span>
+<span class="source-line-no">309</span><span id="line-309"> }</span>
+<span class="source-line-no">310</span><span id="line-310"></span>
+<span class="source-line-no">311</span><span id="line-311"> /**</span>
+<span class="source-line-no">312</span><span id="line-312"> * Concrete implementers can signal a failure condition in their code by throwing an</span>
+<span class="source-line-no">313</span><span id="line-313"> * {@link IOException}.</span>
+<span class="source-line-no">314</span><span id="line-314"> * @return true if and only if the fields of the filter that are serialized are equal to the</span>
+<span class="source-line-no">315</span><span id="line-315"> * corresponding fields in other. Used for testing.</span>
<span class="source-line-no">316</span><span id="line-316"> */</span>
-<span class="source-line-no">317</span><span id="line-317"> public void setReversed(boolean reversed) {</span>
-<span class="source-line-no">318</span><span id="line-318"> this.reversed = reversed;</span>
-<span class="source-line-no">319</span><span id="line-319"> }</span>
-<span class="source-line-no">320</span><span id="line-320"></span>
-<span class="source-line-no">321</span><span id="line-321"> public boolean isReversed() {</span>
-<span class="source-line-no">322</span><span id="line-322"> return this.reversed;</span>
-<span class="source-line-no">323</span><span id="line-323"> }</span>
-<span class="source-line-no">324</span><span id="line-324">}</span>
+<span class="source-line-no">317</span><span id="line-317"> abstract boolean areSerializedFieldsEqual(Filter other);</span>
+<span class="source-line-no">318</span><span id="line-318"></span>
+<span class="source-line-no">319</span><span id="line-319"> /**</span>
+<span class="source-line-no">320</span><span id="line-320"> * alter the reversed scan flag</span>
+<span class="source-line-no">321</span><span id="line-321"> * @param reversed flag</span>
+<span class="source-line-no">322</span><span id="line-322"> */</span>
+<span class="source-line-no">323</span><span id="line-323"> public void setReversed(boolean reversed) {</span>
+<span class="source-line-no">324</span><span id="line-324"> this.reversed = reversed;</span>
+<span class="source-line-no">325</span><span id="line-325"> }</span>
+<span class="source-line-no">326</span><span id="line-326"></span>
+<span class="source-line-no">327</span><span id="line-327"> public boolean isReversed() {</span>
+<span class="source-line-no">328</span><span id="line-328"> return this.reversed;</span>
+<span class="source-line-no">329</span><span id="line-329"> }</span>
+<span class="source-line-no">330</span><span id="line-330">}</span>
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/filter/Filter.html b/apidocs/src-html/org/apache/hadoop/hbase/filter/Filter.html
index 2f33d98eb0f..aeb5a0847b5 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/filter/Filter.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/filter/Filter.html
@@ -229,112 +229,118 @@
<span class="source-line-no">216</span><span id="line-216"> * must point to a <em>smaller</em> row key (earlier in reverse-scan direction). The scanner</span>
<span class="source-line-no">217</span><span id="line-217"> * validates hint direction and falls back to {@code nextRow()} if the hint does not advance in</span>
<span class="source-line-no">218</span><span id="line-218"> * the scan direction.</li></span>
-<span class="source-line-no">219</span><span id="line-219"> * <li><strong>Composite filter limitation:</strong> {@code FilterList}, {@code SkipFilter}, and</span>
-<span class="source-line-no">220</span><span id="line-220"> * {@code WhileMatchFilter} do not currently delegate this method to wrapped sub-filters. Hints</span>
-<span class="source-line-no">221</span><span id="line-221"> * from filters used inside these wrappers will be silently ignored.</li></span>
-<span class="source-line-no">222</span><span id="line-222"> * </ul></span>
-<span class="source-line-no">223</span><span id="line-223"> * @param firstRowCell the first cell encountered in the rejected row; contains the row key that</span>
-<span class="source-line-no">224</span><span id="line-224"> * was passed to {@code filterRowKey}</span>
-<span class="source-line-no">225</span><span id="line-225"> * @return a {@link Cell} representing the earliest position the scanner should seek to, or</span>
-<span class="source-line-no">226</span><span id="line-226"> * {@code null} if this filter cannot provide a better position than a sequential skip</span>
-<span class="source-line-no">227</span><span id="line-227"> * @throws IOException in case an I/O or filter-specific failure needs to be signaled</span>
-<span class="source-line-no">228</span><span id="line-228"> * @see #filterRowKey(Cell)</span>
-<span class="source-line-no">229</span><span id="line-229"> */</span>
-<span class="source-line-no">230</span><span id="line-230"> public Cell getHintForRejectedRow(final Cell firstRowCell) throws IOException {</span>
-<span class="source-line-no">231</span><span id="line-231"> return null;</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"> /**</span>
-<span class="source-line-no">235</span><span id="line-235"> * Provides a seek hint for cells that are structurally skipped by the scan pipeline</span>
-<span class="source-line-no">236</span><span id="line-236"> * <em>before</em> {@link #filterCell(Cell)} is ever reached. The pipeline short-circuits on</span>
-<span class="source-line-no">237</span><span id="line-237"> * several criteria — time-range mismatch, column-set exclusion, and version-limit exhaustion —</span>
-<span class="source-line-no">238</span><span id="line-238"> * and in each case the filter is bypassed entirely. When an implementation can compute a</span>
-<span class="source-line-no">239</span><span id="line-239"> * meaningful forward position purely from the cell's coordinates (without needing the</span>
-<span class="source-line-no">240</span><span id="line-240"> * {@code filterCell} call sequence), it should return that position here so the scanner can seek</span>
-<span class="source-line-no">241</span><span id="line-241"> * ahead instead of advancing one cell at a time.</span>
-<span class="source-line-no">242</span><span id="line-242"> * <p></span>
-<span class="source-line-no">243</span><span id="line-243"> * Contract:</span>
-<span class="source-line-no">244</span><span id="line-244"> * <ul></span>
-<span class="source-line-no">245</span><span id="line-245"> * <li>May be called for cells that have <strong>never</strong> been passed to</span>
-<span class="source-line-no">246</span><span id="line-246"> * {@link #filterCell(Cell)}.</li></span>
-<span class="source-line-no">247</span><span id="line-247"> * <li>Implementations <strong>must not</strong> modify any filter state; this method is treated</span>
-<span class="source-line-no">248</span><span id="line-248"> * as logically stateless. Only filters whose hint computation is based solely on immutable</span>
-<span class="source-line-no">249</span><span id="line-249"> * configuration (e.g. a fixed column range or a fuzzy-row pattern) should override this.</li></span>
-<span class="source-line-no">250</span><span id="line-250"> * <li>The returned {@link Cell}, if non-null, must be an</span>
-<span class="source-line-no">251</span><span id="line-251"> * {@link org.apache.hadoop.hbase.ExtendedCell} because filters are evaluated on the server</span>
-<span class="source-line-no">252</span><span id="line-252"> * side.</li></span>
-<span class="source-line-no">253</span><span id="line-253"> * <li>Returning {@code null} (the default) falls through to the existing structural skip/seek</span>
-<span class="source-line-no">254</span><span id="line-254"> * behaviour, preserving full backward compatibility.</li></span>
-<span class="source-line-no">255</span><span id="line-255"> * <li>For reversed scans, the returned cell must have a <em>smaller</em> row key (i.e., earlier</span>
-<span class="source-line-no">256</span><span id="line-256"> * in reverse-scan direction) than the {@code skippedCell}. Hints that do not advance in the scan</span>
-<span class="source-line-no">257</span><span id="line-257"> * direction are silently ignored.</li></span>
-<span class="source-line-no">258</span><span id="line-258"> * <li><strong>Composite filter limitation:</strong> {@code FilterList}, {@code SkipFilter}, and</span>
-<span class="source-line-no">259</span><span id="line-259"> * {@code WhileMatchFilter} do not currently delegate this method to wrapped sub-filters. Hints</span>
-<span class="source-line-no">260</span><span id="line-260"> * from filters used inside these wrappers will be silently ignored.</li></span>
-<span class="source-line-no">261</span><span id="line-261"> * </ul></span>
-<span class="source-line-no">262</span><span id="line-262"> * @param skippedCell the cell that was rejected by the time-range, column, or version gate before</span>
-<span class="source-line-no">263</span><span id="line-263"> * {@code filterCell} could be consulted</span>
-<span class="source-line-no">264</span><span id="line-264"> * @return a {@link Cell} representing the earliest position the scanner should seek to, or</span>
-<span class="source-line-no">265</span><span id="line-265"> * {@code null} if this filter cannot provide a better position than the structural hint</span>
-<span class="source-line-no">266</span><span id="line-266"> * @throws IOException in case an I/O or filter-specific failure needs to be signaled</span>
-<span class="source-line-no">267</span><span id="line-267"> * @see #filterCell(Cell)</span>
-<span class="source-line-no">268</span><span id="line-268"> * @see #getNextCellHint(Cell)</span>
-<span class="source-line-no">269</span><span id="line-269"> */</span>
-<span class="source-line-no">270</span><span id="line-270"> public Cell getSkipHint(final Cell skippedCell) throws IOException {</span>
-<span class="source-line-no">271</span><span id="line-271"> return null;</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"> * Check that given column family is essential for filter to check row. Most filters always return</span>
-<span class="source-line-no">276</span><span id="line-276"> * true here. But some could have more sophisticated logic which could significantly reduce</span>
-<span class="source-line-no">277</span><span id="line-277"> * scanning process by not even touching columns until we are 100% sure that it's data is needed</span>
-<span class="source-line-no">278</span><span id="line-278"> * in result. Concrete implementers can signal a failure condition in their code by throwing an</span>
-<span class="source-line-no">279</span><span id="line-279"> * {@link IOException}.</span>
-<span class="source-line-no">280</span><span id="line-280"> * @throws IOException in case an I/O or an filter specific failure needs to be signaled.</span>
-<span class="source-line-no">281</span><span id="line-281"> */</span>
-<span class="source-line-no">282</span><span id="line-282"> abstract public boolean isFamilyEssential(byte[] name) throws IOException;</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"> * TODO: JAVADOC Concrete implementers can signal a failure condition in their code by throwing an</span>
-<span class="source-line-no">286</span><span id="line-286"> * {@link IOException}.</span>
-<span class="source-line-no">287</span><span id="line-287"> * @return The filter serialized using pb</span>
-<span class="source-line-no">288</span><span id="line-288"> * @throws IOException in case an I/O or an filter specific failure needs to be signaled.</span>
-<span class="source-line-no">289</span><span id="line-289"> */</span>
-<span class="source-line-no">290</span><span id="line-290"> abstract public byte[] toByteArray() throws IOException;</span>
-<span class="source-line-no">291</span><span id="line-291"></span>
-<span class="source-line-no">292</span><span id="line-292"> /**</span>
-<span class="source-line-no">293</span><span id="line-293"> * Concrete implementers can signal a failure condition in their code by throwing an</span>
-<span class="source-line-no">294</span><span id="line-294"> * {@link IOException}.</span>
-<span class="source-line-no">295</span><span id="line-295"> * @param pbBytes A pb serialized {@link Filter} instance</span>
-<span class="source-line-no">296</span><span id="line-296"> * @return An instance of {@link Filter} made from <code>bytes</code></span>
-<span class="source-line-no">297</span><span id="line-297"> * @throws DeserializationException if an error occurred</span>
-<span class="source-line-no">298</span><span id="line-298"> * @see #toByteArray</span>
-<span class="source-line-no">299</span><span id="line-299"> */</span>
-<span class="source-line-no">300</span><span id="line-300"> public static Filter parseFrom(final byte[] pbBytes) throws DeserializationException {</span>
-<span class="source-line-no">301</span><span id="line-301"> throw new DeserializationException(</span>
-<span class="source-line-no">302</span><span id="line-302"> "parseFrom called on base Filter, but should be called on derived type");</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"> * Concrete implementers can signal a failure condition in their code by throwing an</span>
-<span class="source-line-no">307</span><span id="line-307"> * {@link IOException}.</span>
-<span class="source-line-no">308</span><span id="line-308"> * @return true if and only if the fields of the filter that are serialized are equal to the</span>
-<span class="source-line-no">309</span><span id="line-309"> * corresponding fields in other. Used for testing.</span>
-<span class="source-line-no">310</span><span id="line-310"> */</span>
-<span class="source-line-no">311</span><span id="line-311"> abstract boolean areSerializedFieldsEqual(Filter other);</span>
-<span class="source-line-no">312</span><span id="line-312"></span>
-<span class="source-line-no">313</span><span id="line-313"> /**</span>
-<span class="source-line-no">314</span><span id="line-314"> * alter the reversed scan flag</span>
-<span class="source-line-no">315</span><span id="line-315"> * @param reversed flag</span>
+<span class="source-line-no">219</span><span id="line-219"> * <li><strong>Composite filter support:</strong> {@code FilterList} (both {@code MUST_PASS_ALL}</span>
+<span class="source-line-no">220</span><span id="line-220"> * and {@code MUST_PASS_ONE}), {@code SkipFilter}, and {@code WhileMatchFilter} delegate this</span>
+<span class="source-line-no">221</span><span id="line-221"> * method to their sub-filters and merge the results. For AND ({@code MUST_PASS_ALL}), only</span>
+<span class="source-line-no">222</span><span id="line-222"> * sub-filters whose {@code filterRowKey} individually returned {@code true} are consulted, and</span>
+<span class="source-line-no">223</span><span id="line-223"> * the farthest (maximal-step) hint among them is returned. For OR ({@code MUST_PASS_ONE}), the</span>
+<span class="source-line-no">224</span><span id="line-224"> * nearest hint is returned only when every non-terminated sub-filter provides one — any null</span>
+<span class="source-line-no">225</span><span id="line-225"> * collapses the OR result to null.</li></span>
+<span class="source-line-no">226</span><span id="line-226"> * </ul></span>
+<span class="source-line-no">227</span><span id="line-227"> * @param firstRowCell the first cell encountered in the rejected row; contains the row key that</span>
+<span class="source-line-no">228</span><span id="line-228"> * was passed to {@code filterRowKey}</span>
+<span class="source-line-no">229</span><span id="line-229"> * @return a {@link Cell} representing the earliest position the scanner should seek to, or</span>
+<span class="source-line-no">230</span><span id="line-230"> * {@code null} if this filter cannot provide a better position than a sequential skip</span>
+<span class="source-line-no">231</span><span id="line-231"> * @throws IOException in case an I/O or filter-specific failure needs to be signaled</span>
+<span class="source-line-no">232</span><span id="line-232"> * @see #filterRowKey(Cell)</span>
+<span class="source-line-no">233</span><span id="line-233"> */</span>
+<span class="source-line-no">234</span><span id="line-234"> public Cell getHintForRejectedRow(final Cell firstRowCell) throws IOException {</span>
+<span class="source-line-no">235</span><span id="line-235"> return null;</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"> /**</span>
+<span class="source-line-no">239</span><span id="line-239"> * Provides a seek hint for cells that are structurally skipped by the scan pipeline</span>
+<span class="source-line-no">240</span><span id="line-240"> * <em>before</em> {@link #filterCell(Cell)} is ever reached. The pipeline short-circuits on</span>
+<span class="source-line-no">241</span><span id="line-241"> * several criteria — time-range mismatch, column-set exclusion, and version-limit exhaustion —</span>
+<span class="source-line-no">242</span><span id="line-242"> * and in each case the filter is bypassed entirely. When an implementation can compute a</span>
+<span class="source-line-no">243</span><span id="line-243"> * meaningful forward position purely from the cell's coordinates (without needing the</span>
+<span class="source-line-no">244</span><span id="line-244"> * {@code filterCell} call sequence), it should return that position here so the scanner can seek</span>
+<span class="source-line-no">245</span><span id="line-245"> * ahead instead of advancing one cell at a time.</span>
+<span class="source-line-no">246</span><span id="line-246"> * <p></span>
+<span class="source-line-no">247</span><span id="line-247"> * Contract:</span>
+<span class="source-line-no">248</span><span id="line-248"> * <ul></span>
+<span class="source-line-no">249</span><span id="line-249"> * <li>May be called for cells that have <strong>never</strong> been passed to</span>
+<span class="source-line-no">250</span><span id="line-250"> * {@link #filterCell(Cell)}.</li></span>
+<span class="source-line-no">251</span><span id="line-251"> * <li>Implementations <strong>must not</strong> modify any filter state; this method is treated</span>
+<span class="source-line-no">252</span><span id="line-252"> * as logically stateless. Only filters whose hint computation is based solely on immutable</span>
+<span class="source-line-no">253</span><span id="line-253"> * configuration (e.g. a fixed column range or a fuzzy-row pattern) should override this.</li></span>
+<span class="source-line-no">254</span><span id="line-254"> * <li>The returned {@link Cell}, if non-null, must be an</span>
+<span class="source-line-no">255</span><span id="line-255"> * {@link org.apache.hadoop.hbase.ExtendedCell} because filters are evaluated on the server</span>
+<span class="source-line-no">256</span><span id="line-256"> * side.</li></span>
+<span class="source-line-no">257</span><span id="line-257"> * <li>Returning {@code null} (the default) falls through to the existing structural skip/seek</span>
+<span class="source-line-no">258</span><span id="line-258"> * behaviour, preserving full backward compatibility.</li></span>
+<span class="source-line-no">259</span><span id="line-259"> * <li>For reversed scans, the returned cell must have a <em>smaller</em> row key (i.e., earlier</span>
+<span class="source-line-no">260</span><span id="line-260"> * in reverse-scan direction) than the {@code skippedCell}. Hints that do not advance in the scan</span>
+<span class="source-line-no">261</span><span id="line-261"> * direction are silently ignored.</li></span>
+<span class="source-line-no">262</span><span id="line-262"> * <li><strong>Composite filter support:</strong> {@code FilterList} (both {@code MUST_PASS_ALL}</span>
+<span class="source-line-no">263</span><span id="line-263"> * and {@code MUST_PASS_ONE}), {@code SkipFilter}, and {@code WhileMatchFilter} delegate this</span>
+<span class="source-line-no">264</span><span id="line-264"> * method to their sub-filters and merge the results (maximal step for AND; for OR, the nearest</span>
+<span class="source-line-no">265</span><span id="line-265"> * hint is returned only when every non-terminated sub-filter provides one — any null collapses</span>
+<span class="source-line-no">266</span><span id="line-266"> * the OR result to null).</li></span>
+<span class="source-line-no">267</span><span id="line-267"> * </ul></span>
+<span class="source-line-no">268</span><span id="line-268"> * @param skippedCell the cell that was rejected by the time-range, column, or version gate before</span>
+<span class="source-line-no">269</span><span id="line-269"> * {@code filterCell} could be consulted</span>
+<span class="source-line-no">270</span><span id="line-270"> * @return a {@link Cell} representing the earliest position the scanner should seek to, or</span>
+<span class="source-line-no">271</span><span id="line-271"> * {@code null} if this filter cannot provide a better position than the structural hint</span>
+<span class="source-line-no">272</span><span id="line-272"> * @throws IOException in case an I/O or filter-specific failure needs to be signaled</span>
+<span class="source-line-no">273</span><span id="line-273"> * @see #filterCell(Cell)</span>
+<span class="source-line-no">274</span><span id="line-274"> * @see #getNextCellHint(Cell)</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 Cell getSkipHint(final Cell skippedCell) throws IOException {</span>
+<span class="source-line-no">277</span><span id="line-277"> return null;</span>
+<span class="source-line-no">278</span><span id="line-278"> }</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"> * Check that given column family is essential for filter to check row. Most filters always return</span>
+<span class="source-line-no">282</span><span id="line-282"> * true here. But some could have more sophisticated logic which could significantly reduce</span>
+<span class="source-line-no">283</span><span id="line-283"> * scanning process by not even touching columns until we are 100% sure that it's data is needed</span>
+<span class="source-line-no">284</span><span id="line-284"> * in result. Concrete implementers can signal a failure condition in their code by throwing an</span>
+<span class="source-line-no">285</span><span id="line-285"> * {@link IOException}.</span>
+<span class="source-line-no">286</span><span id="line-286"> * @throws IOException in case an I/O or an filter specific failure needs to be signaled.</span>
+<span class="source-line-no">287</span><span id="line-287"> */</span>
+<span class="source-line-no">288</span><span id="line-288"> abstract public boolean isFamilyEssential(byte[] name) throws IOException;</span>
+<span class="source-line-no">289</span><span id="line-289"></span>
+<span class="source-line-no">290</span><span id="line-290"> /**</span>
+<span class="source-line-no">291</span><span id="line-291"> * TODO: JAVADOC Concrete implementers can signal a failure condition in their code by throwing an</span>
+<span class="source-line-no">292</span><span id="line-292"> * {@link IOException}.</span>
+<span class="source-line-no">293</span><span id="line-293"> * @return The filter serialized using pb</span>
+<span class="source-line-no">294</span><span id="line-294"> * @throws IOException in case an I/O or an filter specific failure needs to be signaled.</span>
+<span class="source-line-no">295</span><span id="line-295"> */</span>
+<span class="source-line-no">296</span><span id="line-296"> abstract public byte[] toByteArray() throws IOException;</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"> * Concrete implementers can signal a failure condition in their code by throwing an</span>
+<span class="source-line-no">300</span><span id="line-300"> * {@link IOException}.</span>
+<span class="source-line-no">301</span><span id="line-301"> * @param pbBytes A pb serialized {@link Filter} instance</span>
+<span class="source-line-no">302</span><span id="line-302"> * @return An instance of {@link Filter} made from <code>bytes</code></span>
+<span class="source-line-no">303</span><span id="line-303"> * @throws DeserializationException if an error occurred</span>
+<span class="source-line-no">304</span><span id="line-304"> * @see #toByteArray</span>
+<span class="source-line-no">305</span><span id="line-305"> */</span>
+<span class="source-line-no">306</span><span id="line-306"> public static Filter parseFrom(final byte[] pbBytes) throws DeserializationException {</span>
+<span class="source-line-no">307</span><span id="line-307"> throw new DeserializationException(</span>
+<span class="source-line-no">308</span><span id="line-308"> "parseFrom called on base Filter, but should be called on derived type");</span>
+<span class="source-line-no">309</span><span id="line-309"> }</span>
+<span class="source-line-no">310</span><span id="line-310"></span>
+<span class="source-line-no">311</span><span id="line-311"> /**</span>
+<span class="source-line-no">312</span><span id="line-312"> * Concrete implementers can signal a failure condition in their code by throwing an</span>
+<span class="source-line-no">313</span><span id="line-313"> * {@link IOException}.</span>
+<span class="source-line-no">314</span><span id="line-314"> * @return true if and only if the fields of the filter that are serialized are equal to the</span>
+<span class="source-line-no">315</span><span id="line-315"> * corresponding fields in other. Used for testing.</span>
<span class="source-line-no">316</span><span id="line-316"> */</span>
-<span class="source-line-no">317</span><span id="line-317"> public void setReversed(boolean reversed) {</span>
-<span class="source-line-no">318</span><span id="line-318"> this.reversed = reversed;</span>
-<span class="source-line-no">319</span><span id="line-319"> }</span>
-<span class="source-line-no">320</span><span id="line-320"></span>
-<span class="source-line-no">321</span><span id="line-321"> public boolean isReversed() {</span>
-<span class="source-line-no">322</span><span id="line-322"> return this.reversed;</span>
-<span class="source-line-no">323</span><span id="line-323"> }</span>
-<span class="source-line-no">324</span><span id="line-324">}</span>
+<span class="source-line-no">317</span><span id="line-317"> abstract boolean areSerializedFieldsEqual(Filter other);</span>
+<span class="source-line-no">318</span><span id="line-318"></span>
+<span class="source-line-no">319</span><span id="line-319"> /**</span>
+<span class="source-line-no">320</span><span id="line-320"> * alter the reversed scan flag</span>
+<span class="source-line-no">321</span><span id="line-321"> * @param reversed flag</span>
+<span class="source-line-no">322</span><span id="line-322"> */</span>
+<span class="source-line-no">323</span><span id="line-323"> public void setReversed(boolean reversed) {</span>
+<span class="source-line-no">324</span><span id="line-324"> this.reversed = reversed;</span>
+<span class="source-line-no">325</span><span id="line-325"> }</span>
+<span class="source-line-no">326</span><span id="line-326"></span>
+<span class="source-line-no">327</span><span id="line-327"> public boolean isReversed() {</span>
+<span class="source-line-no">328</span><span id="line-328"> return this.reversed;</span>
+<span class="source-line-no">329</span><span id="line-329"> }</span>
+<span class="source-line-no">330</span><span id="line-330">}</span>
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/filter/FilterList.Operator.html b/apidocs/src-html/org/apache/hadoop/hbase/filter/FilterList.Operator.html
index 70b43734f06..e61377ab5e4 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/filter/FilterList.Operator.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/filter/FilterList.Operator.html
@@ -256,37 +256,47 @@
<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">245</span><span id="line-245"> @Override</span>
-<span class="source-line-no">246</span><span id="line-246"> public boolean isFamilyEssential(byte[] name) throws IOException {</span>
-<span class="source-line-no">247</span><span id="line-247"> return this.filterListBase.isFamilyEssential(name);</span>
+<span class="source-line-no">246</span><span id="line-246"> public Cell getHintForRejectedRow(Cell firstRowCell) throws IOException {</span>
+<span class="source-line-no">247</span><span id="line-247"> return this.filterListBase.getHintForRejectedRow(firstRowCell);</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"> @Override</span>
-<span class="source-line-no">251</span><span id="line-251"> public void setReversed(boolean reversed) {</span>
-<span class="source-line-no">252</span><span id="line-252"> this.reversed = reversed;</span>
-<span class="source-line-no">253</span><span id="line-253"> this.filterListBase.setReversed(reversed);</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"> @Override</span>
-<span class="source-line-no">257</span><span id="line-257"> public boolean isReversed() {</span>
-<span class="source-line-no">258</span><span id="line-258"> assert this.reversed == this.filterListBase.isReversed();</span>
-<span class="source-line-no">259</span><span id="line-259"> return this.reversed;</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"> @Override</span>
-<span class="source-line-no">263</span><span id="line-263"> public String toString() {</span>
-<span class="source-line-no">264</span><span id="line-264"> return this.filterListBase.toString();</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"> @Override</span>
-<span class="source-line-no">268</span><span id="line-268"> public boolean equals(Object obj) {</span>
-<span class="source-line-no">269</span><span id="line-269"> return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);</span>
+<span class="source-line-no">251</span><span id="line-251"> public Cell getSkipHint(Cell skippedCell) throws IOException {</span>
+<span class="source-line-no">252</span><span id="line-252"> return this.filterListBase.getSkipHint(skippedCell);</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"> @Override</span>
+<span class="source-line-no">256</span><span id="line-256"> public boolean isFamilyEssential(byte[] name) throws IOException {</span>
+<span class="source-line-no">257</span><span id="line-257"> return this.filterListBase.isFamilyEssential(name);</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"> @Override</span>
+<span class="source-line-no">261</span><span id="line-261"> public void setReversed(boolean reversed) {</span>
+<span class="source-line-no">262</span><span id="line-262"> this.reversed = reversed;</span>
+<span class="source-line-no">263</span><span id="line-263"> this.filterListBase.setReversed(reversed);</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"> @Override</span>
+<span class="source-line-no">267</span><span id="line-267"> public boolean isReversed() {</span>
+<span class="source-line-no">268</span><span id="line-268"> assert this.reversed == this.filterListBase.isReversed();</span>
+<span class="source-line-no">269</span><span id="line-269"> return this.reversed;</span>
<span class="source-line-no">270</span><span id="line-270"> }</span>
<span class="source-line-no">271</span><span id="line-271"></span>
<span class="source-line-no">272</span><span id="line-272"> @Override</span>
-<span class="source-line-no">273</span><span id="line-273"> public int hashCode() {</span>
-<span class="source-line-no">274</span><span id="line-274"> return Objects.hash(getOperator(), getFilters());</span>
+<span class="source-line-no">273</span><span id="line-273"> public String toString() {</span>
+<span class="source-line-no">274</span><span id="line-274"> return this.filterListBase.toString();</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">276</span><span id="line-276"></span>
+<span class="source-line-no">277</span><span id="line-277"> @Override</span>
+<span class="source-line-no">278</span><span id="line-278"> public boolean equals(Object obj) {</span>
+<span class="source-line-no">279</span><span id="line-279"> return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);</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"> @Override</span>
+<span class="source-line-no">283</span><span id="line-283"> public int hashCode() {</span>
+<span class="source-line-no">284</span><span id="line-284"> return Objects.hash(getOperator(), getFilters());</span>
+<span class="source-line-no">285</span><span id="line-285"> }</span>
+<span class="source-line-no">286</span><span id="line-286">}</span>
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/filter/FilterList.html b/apidocs/src-html/org/apache/hadoop/hbase/filter/FilterList.html
index b412fb227e6..d931cb8b1a9 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/filter/FilterList.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/filter/FilterList.html
@@ -256,37 +256,47 @@
<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">245</span><span id="line-245"> @Override</span>
-<span class="source-line-no">246</span><span id="line-246"> public boolean isFamilyEssential(byte[] name) throws IOException {</span>
-<span class="source-line-no">247</span><span id="line-247"> return this.filterListBase.isFamilyEssential(name);</span>
+<span class="source-line-no">246</span><span id="line-246"> public Cell getHintForRejectedRow(Cell firstRowCell) throws IOException {</span>
+<span class="source-line-no">247</span><span id="line-247"> return this.filterListBase.getHintForRejectedRow(firstRowCell);</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"> @Override</span>
-<span class="source-line-no">251</span><span id="line-251"> public void setReversed(boolean reversed) {</span>
-<span class="source-line-no">252</span><span id="line-252"> this.reversed = reversed;</span>
-<span class="source-line-no">253</span><span id="line-253"> this.filterListBase.setReversed(reversed);</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"> @Override</span>
-<span class="source-line-no">257</span><span id="line-257"> public boolean isReversed() {</span>
-<span class="source-line-no">258</span><span id="line-258"> assert this.reversed == this.filterListBase.isReversed();</span>
-<span class="source-line-no">259</span><span id="line-259"> return this.reversed;</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"> @Override</span>
-<span class="source-line-no">263</span><span id="line-263"> public String toString() {</span>
-<span class="source-line-no">264</span><span id="line-264"> return this.filterListBase.toString();</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"> @Override</span>
-<span class="source-line-no">268</span><span id="line-268"> public boolean equals(Object obj) {</span>
-<span class="source-line-no">269</span><span id="line-269"> return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);</span>
+<span class="source-line-no">251</span><span id="line-251"> public Cell getSkipHint(Cell skippedCell) throws IOException {</span>
+<span class="source-line-no">252</span><span id="line-252"> return this.filterListBase.getSkipHint(skippedCell);</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"> @Override</span>
+<span class="source-line-no">256</span><span id="line-256"> public boolean isFamilyEssential(byte[] name) throws IOException {</span>
+<span class="source-line-no">257</span><span id="line-257"> return this.filterListBase.isFamilyEssential(name);</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"> @Override</span>
+<span class="source-line-no">261</span><span id="line-261"> public void setReversed(boolean reversed) {</span>
+<span class="source-line-no">262</span><span id="line-262"> this.reversed = reversed;</span>
+<span class="source-line-no">263</span><span id="line-263"> this.filterListBase.setReversed(reversed);</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"> @Override</span>
+<span class="source-line-no">267</span><span id="line-267"> public boolean isReversed() {</span>
+<span class="source-line-no">268</span><span id="line-268"> assert this.reversed == this.filterListBase.isReversed();</span>
+<span class="source-line-no">269</span><span id="line-269"> return this.reversed;</span>
<span class="source-line-no">270</span><span id="line-270"> }</span>
<span class="source-line-no">271</span><span id="line-271"></span>
<span class="source-line-no">272</span><span id="line-272"> @Override</span>
-<span class="source-line-no">273</span><span id="line-273"> public int hashCode() {</span>
-<span class="source-line-no">274</span><span id="line-274"> return Objects.hash(getOperator(), getFilters());</span>
+<span class="source-line-no">273</span><span id="line-273"> public String toString() {</span>
+<span class="source-line-no">274</span><span id="line-274"> return this.filterListBase.toString();</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">276</span><span id="line-276"></span>
+<span class="source-line-no">277</span><span id="line-277"> @Override</span>
+<span class="source-line-no">278</span><span id="line-278"> public boolean equals(Object obj) {</span>
+<span class="source-line-no">279</span><span id="line-279"> return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);</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"> @Override</span>
+<span class="source-line-no">283</span><span id="line-283"> public int hashCode() {</span>
+<span class="source-line-no">284</span><span id="line-284"> return Objects.hash(getOperator(), getFilters());</span>
+<span class="source-line-no">285</span><span id="line-285"> }</span>
+<span class="source-line-no">286</span><span id="line-286">}</span>
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html b/apidocs/src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html
index 9c3806904af..94ed173060a 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html
@@ -32,322 +32,388 @@
<span class="source-line-no">019</span><span id="line-19"></span>
<span class="source-line-no">020</span><span id="line-20">import java.io.IOException;</span>
<span class="source-line-no">021</span><span id="line-21">import java.util.ArrayList;</span>
-<span class="source-line-no">022</span><span id="line-22">import java.util.Collections;</span>
-<span class="source-line-no">023</span><span id="line-23">import java.util.List;</span>
-<span class="source-line-no">024</span><span id="line-24">import java.util.Objects;</span>
-<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.Cell;</span>
-<span class="source-line-no">026</span><span id="line-26">import org.apache.yetus.audience.InterfaceAudience;</span>
-<span class="source-line-no">027</span><span id="line-27"></span>
-<span class="source-line-no">028</span><span id="line-28">/**</span>
-<span class="source-line-no">029</span><span id="line-29"> * FilterListWithAND represents an ordered list of filters which will be evaluated with an AND</span>
-<span class="source-line-no">030</span><span id="line-30"> * operator.</span>
-<span class="source-line-no">031</span><span id="line-31"> */</span>
-<span class="source-line-no">032</span><span id="line-32">@InterfaceAudience.Private</span>
-<span class="source-line-no">033</span><span id="line-33">public class FilterListWithAND extends FilterListBase {</span>
-<span class="source-line-no">034</span><span id="line-34"></span>
-<span class="source-line-no">035</span><span id="line-35"> private List<Filter> seekHintFilters = new ArrayList<>();</span>
-<span class="source-line-no">036</span><span id="line-36"> private boolean[] hintingFilters;</span>
-<span class="source-line-no">037</span><span id="line-37"></span>
-<span class="source-line-no">038</span><span id="line-38"> public FilterListWithAND(List<Filter> filters) {</span>
-<span class="source-line-no">039</span><span id="line-39"> super(filters);</span>
-<span class="source-line-no">040</span><span id="line-40"> // For FilterList with AND, when call FL's transformCell(), we should transform cell for all</span>
-<span class="source-line-no">041</span><span id="line-41"> // sub-filters (because all sub-filters return INCLUDE*). So here, fill this array with true. we</span>
-<span class="source-line-no">042</span><span id="line-42"> // keep this in FilterListWithAND for abstracting the transformCell() in FilterListBase.</span>
-<span class="source-line-no">043</span><span id="line-43"> subFiltersIncludedCell = new ArrayList<>(Collections.nCopies(filters.size(), true));</span>
-<span class="source-line-no">044</span><span id="line-44"> cacheHintingFilters();</span>
-<span class="source-line-no">045</span><span id="line-45"> }</span>
-<span class="source-line-no">046</span><span id="line-46"></span>
-<span class="source-line-no">047</span><span id="line-47"> @Override</span>
-<span class="source-line-no">048</span><span id="line-48"> public void addFilterLists(List<Filter> filters) {</span>
-<span class="source-line-no">049</span><span id="line-49"> if (checkAndGetReversed(filters, isReversed()) != isReversed()) {</span>
-<span class="source-line-no">050</span><span id="line-50"> throw new IllegalArgumentException("Filters in the list must have the same reversed flag");</span>
-<span class="source-line-no">051</span><span id="line-51"> }</span>
-<span class="source-line-no">052</span><span id="line-52"> this.filters.addAll(filters);</span>
-<span class="source-line-no">053</span><span id="line-53"> this.subFiltersIncludedCell.addAll(Collections.nCopies(filters.size(), true));</span>
-<span class="source-line-no">054</span><span id="line-54"> this.cacheHintingFilters();</span>
-<span class="source-line-no">055</span><span id="line-55"> }</span>
-<span class="source-line-no">056</span><span id="line-56"></span>
-<span class="source-line-no">057</span><span id="line-57"> @Override</span>
-<span class="source-line-no">058</span><span id="line-58"> protected String formatLogFilters(List<Filter> logFilters) {</span>
-<span class="source-line-no">059</span><span id="line-59"> return String.format("FilterList AND (%d/%d): %s", logFilters.size(), this.size(),</span>
-<span class="source-line-no">060</span><span id="line-60"> logFilters.toString());</span>
-<span class="source-line-no">061</span><span id="line-61"> }</span>
-<span class="source-line-no">062</span><span id="line-62"></span>
-<span class="source-line-no">063</span><span id="line-63"> /**</span>
-<span class="source-line-no">064</span><span id="line-64"> * As checks for this are in the hot path, we want them as fast as possible, so we are caching the</span>
-<span class="source-line-no">065</span><span id="line-65"> * status in an array.</span>
-<span class="source-line-no">066</span><span id="line-66"> */</span>
-<span class="source-line-no">067</span><span id="line-67"> private void cacheHintingFilters() {</span>
-<span class="source-line-no">068</span><span id="line-68"> int filtersSize = filters.size();</span>
-<span class="source-line-no">069</span><span id="line-69"> hintingFilters = new boolean[filtersSize];</span>
-<span class="source-line-no">070</span><span id="line-70"> for (int i = 0; i < filtersSize; i++) {</span>
-<span class="source-line-no">071</span><span id="line-71"> if (filters.get(i) instanceof HintingFilter) {</span>
-<span class="source-line-no">072</span><span id="line-72"> hintingFilters[i] = true;</span>
-<span class="source-line-no">073</span><span id="line-73"> }</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"></span>
-<span class="source-line-no">077</span><span id="line-77"> /**</span>
-<span class="source-line-no">078</span><span id="line-78"> * FilterList with MUST_PASS_ALL choose the maximal forward step among sub-filters in filter list.</span>
-<span class="source-line-no">079</span><span id="line-79"> * Let's call it: The Maximal Step Rule. So if filter-A in filter list return INCLUDE and filter-B</span>
-<span class="source-line-no">080</span><span id="line-80"> * in filter list return INCLUDE_AND_NEXT_COL, then the filter list should return</span>
-<span class="source-line-no">081</span><span id="line-81"> * INCLUDE_AND_NEXT_COL. For SEEK_NEXT_USING_HINT, it's more special, and in method</span>
-<span class="source-line-no">082</span><span id="line-82"> * filterCellWithMustPassAll(), if any sub-filter return SEEK_NEXT_USING_HINT, then our filter</span>
-<span class="source-line-no">083</span><span id="line-83"> * list will return SEEK_NEXT_USING_HINT. so we don't care about the SEEK_NEXT_USING_HINT here.</span>
-<span class="source-line-no">084</span><span id="line-84"> * <br/></span>
-<span class="source-line-no">085</span><span id="line-85"> * <br/></span>
-<span class="source-line-no">086</span><span id="line-86"> * The jump step will be:</span>
-<span class="source-line-no">087</span><span id="line-87"> *</span>
-<span class="source-line-no">088</span><span id="line-88"> * <pre></span>
-<span class="source-line-no">089</span><span id="line-89"> * INCLUDE &lt; SKIP &lt; INCLUDE_AND_NEXT_COL &lt; NEXT_COL &lt; INCLUDE_AND_SEEK_NEXT_ROW &lt; NEXT_ROW</span>
-<span class="source-line-no">090</span><span id="line-90"> * &lt; SEEK_NEXT_USING_HINT</span>
-<span class="source-line-no">091</span><span id="line-91"> * </pre></span>
-<span class="source-line-no">092</span><span id="line-92"> *</span>
-<span class="source-line-no">093</span><span id="line-93"> * Here, we have the following map to describe The Maximal Step Rule. if current return code (for</span>
-<span class="source-line-no">094</span><span id="line-94"> * previous sub-filters in filter list) is <strong>ReturnCode</strong>, and current filter returns</span>
-<span class="source-line-no">095</span><span id="line-95"> * <strong>localRC</strong>, then we should return map[ReturnCode][localRC] for the merged result,</span>
-<span class="source-line-no">096</span><span id="line-96"> * according to The Maximal Step Rule. <br/></span>
-<span class="source-line-no">097</span><span id="line-97"> *</span>
-<span class="source-line-no">098</span><span id="line-98"> * <pre></span>
-<span class="source-line-no">099</span><span id="line-99"> * LocalCode\ReturnCode INCLUDE INCLUDE_AND_NEXT_COL INCLUDE_AND_SEEK_NEXT_ROW SKIP NEXT_COL NEXT_ROW SEEK_NEXT_USING_HINT</span>
-<span class="source-line-no">100</span><span id="line-100"> * INCLUDE INCLUDE INCLUDE_AND_NEXT_COL INCLUDE_AND_SEEK_NEXT_ROW SKIP NEXT_COL NEXT_ROW SEEK_NEXT_USING_HINT</span>
-<span class="source-line-no">101</span><span id="line-101"> * INCLUDE_AND_NEXT_COL INCLUDE_AND_NEXT_COL INCLUDE_AND_NEXT_COL INCLUDE_AND_SEEK_NEXT_ROW NEXT_COL NEXT_COL NEXT_ROW SEEK_NEXT_USING_HINT</span>
-<span class="source-line-no">102</span><span id="line-102"> * INCLUDE_AND_SEEK_NEXT_ROW INCLUDE_AND_SEEK_NEXT_ROW INCLUDE_AND_SEEK_NEXT_ROW INCLUDE_AND_SEEK_NEXT_ROW NEXT_ROW NEXT_ROW NEXT_ROW SEEK_NEXT_USING_HINT</span>
-<span class="source-line-no">103</span><span id="line-103"> * SKIP SKIP NEXT_COL NEXT_ROW SKIP NEXT_COL NEXT_ROW SEEK_NEXT_USING_HINT</span>
-<span class="source-line-no">104</span><span id="line-104"> * NEXT_COL NEXT_COL NEXT_COL NEXT_ROW NEXT_COL NEXT_COL NEXT_ROW SEEK_NEXT_USING_HINT</span>
-<span class="source-line-no">105</span><span id="line-105"> * NEXT_ROW NEXT_ROW NEXT_ROW NEXT_ROW NEXT_ROW NEXT_ROW NEXT_ROW SEEK_NEXT_USING_HINT</span>
-<span class="source-line-no">106</span><span id="line-106"> * SEEK_NEXT_USING_HINT SEEK_NEXT_USING_HINT SEEK_NEXT_USING_HINT SEEK_NEXT_USING_HINT SEEK_NEXT_USING_HINT SEEK_NEXT_USING_HINT SEEK_NEXT_USING_HINT SEEK_NEXT_USING_HINT</span>
-<span class="source-line-no">107</span><span id="line-107"> * </pre></span>
-<span class="source-line-no">108</span><span id="line-108"> *</span>
-<span class="source-line-no">109</span><span id="line-109"> * @param rc Return code which is calculated by previous sub-filter(s) in filter list.</span>
-<span class="source-line-no">110</span><span id="line-110"> * @param localRC Return code of the current sub-filter in filter list.</span>
-<span class="source-line-no">111</span><span id="line-111"> * @return Return code which is merged by the return code of previous sub-filter(s) and the return</span>
-<span class="source-line-no">112</span><span id="line-112"> * code of current sub-filter.</span>
-<span class="source-line-no">113</span><span id="line-113"> */</span>
-<span class="source-line-no">114</span><span id="line-114"> private ReturnCode mergeReturnCode(ReturnCode rc, ReturnCode localRC) {</span>
-<span class="source-line-no">115</span><span id="line-115"> if (rc == ReturnCode.SEEK_NEXT_USING_HINT) {</span>
-<span class="source-line-no">116</span><span id="line-116"> return ReturnCode.SEEK_NEXT_USING_HINT;</span>
-<span class="source-line-no">117</span><span id="line-117"> }</span>
-<span class="source-line-no">118</span><span id="line-118"> switch (localRC) {</span>
-<span class="source-line-no">119</span><span id="line-119"> case SEEK_NEXT_USING_HINT:</span>
-<span class="source-line-no">120</span><span id="line-120"> return ReturnCode.SEEK_NEXT_USING_HINT;</span>
-<span class="source-line-no">121</span><span id="line-121"> case INCLUDE:</span>
-<span class="source-line-no">122</span><span id="line-122"> return rc;</span>
-<span class="source-line-no">123</span><span id="line-123"> case INCLUDE_AND_NEXT_COL:</span>
-<span class="source-line-no">124</span><span id="line-124"> if (isInReturnCodes(rc, ReturnCode.INCLUDE, ReturnCode.INCLUDE_AND_NEXT_COL)) {</span>
-<span class="source-line-no">125</span><span id="line-125"> return ReturnCode.INCLUDE_AND_NEXT_COL;</span>
-<span class="source-line-no">126</span><span id="line-126"> }</span>
-<span class="source-line-no">127</span><span id="line-127"> if (isInReturnCodes(rc, ReturnCode.INCLUDE_AND_SEEK_NEXT_ROW)) {</span>
-<span class="source-line-no">128</span><span id="line-128"> return ReturnCode.INCLUDE_AND_SEEK_NEXT_ROW;</span>
-<span class="source-line-no">129</span><span id="line-129"> }</span>
-<span class="source-line-no">130</span><span id="line-130"> if (isInReturnCodes(rc, ReturnCode.SKIP, ReturnCode.NEXT_COL)) {</span>
-<span class="source-line-no">131</span><span id="line-131"> return ReturnCode.NEXT_COL;</span>
-<span class="source-line-no">132</span><span id="line-132"> }</span>
-<span class="source-line-no">133</span><span id="line-133"> if (isInReturnCodes(rc, ReturnCode.NEXT_ROW)) {</span>
-<span class="source-line-no">134</span><span id="line-134"> return ReturnCode.NEXT_ROW;</span>
+<span class="source-line-no">022</span><span id="line-22">import java.util.Arrays;</span>
+<span class="source-line-no">023</span><span id="line-23">import java.util.Collections;</span>
+<span class="source-line-no">024</span><span id="line-24">import java.util.List;</span>
+<span class="source-line-no">025</span><span id="line-25">import java.util.Objects;</span>
+<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.Cell;</span>
+<span class="source-line-no">027</span><span id="line-27">import org.apache.yetus.audience.InterfaceAudience;</span>
+<span class="source-line-no">028</span><span id="line-28"></span>
+<span class="source-line-no">029</span><span id="line-29">/**</span>
+<span class="source-line-no">030</span><span id="line-30"> * FilterListWithAND represents an ordered list of filters which will be evaluated with an AND</span>
+<span class="source-line-no">031</span><span id="line-31"> * operator.</span>
+<span class="source-line-no">032</span><span id="line-32"> */</span>
+<span class="source-line-no">033</span><span id="line-33">@InterfaceAudience.Private</span>
+<span class="source-line-no">034</span><span id="line-34">public class FilterListWithAND extends FilterListBase {</span>
+<span class="source-line-no">035</span><span id="line-35"></span>
+<span class="source-line-no">036</span><span id="line-36"> private List<Filter> seekHintFilters = new ArrayList<>();</span>
+<span class="source-line-no">037</span><span id="line-37"> private boolean[] hintingFilters;</span>
+<span class="source-line-no">038</span><span id="line-38"> /**</span>
+<span class="source-line-no">039</span><span id="line-39"> * Tracks which sub-filters returned {@code true} from {@link Filter#filterRowKey(Cell)}. Set in</span>
+<span class="source-line-no">040</span><span id="line-40"> * {@code filterRowKey()}, consumed by {@code getHintForRejectedRow()}, cleared only by</span>
+<span class="source-line-no">041</span><span id="line-41"> * {@code reset()} — callers must invoke {@code reset()} between rows to avoid stale state.</span>
+<span class="source-line-no">042</span><span id="line-42"> */</span>
+<span class="source-line-no">043</span><span id="line-43"> private boolean[] rejectedByFilterRowKey;</span>
+<span class="source-line-no">044</span><span id="line-44"></span>
+<span class="source-line-no">045</span><span id="line-45"> public FilterListWithAND(List<Filter> filters) {</span>
+<span class="source-line-no">046</span><span id="line-46"> super(filters);</span>
+<span class="source-line-no">047</span><span id="line-47"> // For FilterList with AND, when call FL's transformCell(), we should transform cell for all</span>
+<span class="source-line-no">048</span><span id="line-48"> // sub-filters (because all sub-filters return INCLUDE*). So here, fill this array with true. we</span>
+<span class="source-line-no">049</span><span id="line-49"> // keep this in FilterListWithAND for abstracting the transformCell() in FilterListBase.</span>
+<span class="source-line-no">050</span><span id="line-50"> subFiltersIncludedCell = new ArrayList<>(Collections.nCopies(filters.size(), true));</span>
+<span class="source-line-no">051</span><span id="line-51"> rejectedByFilterRowKey = new boolean[filters.size()];</span>
+<span class="source-line-no">052</span><span id="line-52"> cacheHintingFilters();</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 void addFilterLists(List<Filter> filters) {</span>
+<span class="source-line-no">057</span><span id="line-57"> if (checkAndGetReversed(filters, isReversed()) != isReversed()) {</span>
+<span class="source-line-no">058</span><span id="line-58"> throw new IllegalArgumentException("Filters in the list must have the same reversed flag");</span>
+<span class="source-line-no">059</span><span id="line-59"> }</span>
+<span class="source-line-no">060</span><span id="line-60"> this.filters.addAll(filters);</span>
+<span class="source-line-no">061</span><span id="line-61"> this.subFiltersIncludedCell.addAll(Collections.nCopies(filters.size(), true));</span>
+<span class="source-line-no">062</span><span id="line-62"> this.rejectedByFilterRowKey = Arrays.copyOf(this.rejectedByFilterRowKey, this.filters.size());</span>
+<span class="source-line-no">063</span><span id="line-63"> this.cacheHintingFilters();</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"> @Override</span>
+<span class="source-line-no">067</span><span id="line-67"> protected String formatLogFilters(List<Filter> logFilters) {</span>
+<span class="source-line-no">068</span><span id="line-68"> return String.format("FilterList AND (%d/%d): %s", logFilters.size(), this.size(),</span>
+<span class="source-line-no">069</span><span id="line-69"> logFilters.toString());</span>
+<span class="source-line-no">070</span><span id="line-70"> }</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"> * As checks for this are in the hot path, we want them as fast as possible, so we are caching the</span>
+<span class="source-line-no">074</span><span id="line-74"> * status in an array.</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 void cacheHintingFilters() {</span>
+<span class="source-line-no">077</span><span id="line-77"> int filtersSize = filters.size();</span>
+<span class="source-line-no">078</span><span id="line-78"> hintingFilters = new boolean[filtersSize];</span>
+<span class="source-line-no">079</span><span id="line-79"> for (int i = 0; i < filtersSize; i++) {</span>
+<span class="source-line-no">080</span><span id="line-80"> if (filters.get(i) instanceof HintingFilter) {</span>
+<span class="source-line-no">081</span><span id="line-81"> hintingFilters[i] = true;</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"> }</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"> * FilterList with MUST_PASS_ALL choose the maximal forward step among sub-filters in filter list.</span>
+<span class="source-line-no">088</span><span id="line-88"> * Let's call it: The Maximal Step Rule. So if filter-A in filter list return INCLUDE and filter-B</span>
+<span class="source-line-no">089</span><span id="line-89"> * in filter list return INCLUDE_AND_NEXT_COL, then the filter list should return</span>
+<span class="source-line-no">090</span><span id="line-90"> * INCLUDE_AND_NEXT_COL. For SEEK_NEXT_USING_HINT, it's more special, and in method</span>
+<span class="source-line-no">091</span><span id="line-91"> * filterCellWithMustPassAll(), if any sub-filter return SEEK_NEXT_USING_HINT, then our filter</span>
+<span class="source-line-no">092</span><span id="line-92"> * list will return SEEK_NEXT_USING_HINT. so we don't care about the SEEK_NEXT_USING_HINT here.</span>
+<span class="source-line-no">093</span><span id="line-93"> * <br/></span>
+<span class="source-line-no">094</span><span id="line-94"> * <br/></span>
+<span class="source-line-no">095</span><span id="line-95"> * The jump step will be:</span>
+<span class="source-line-no">096</span><span id="line-96"> *</span>
+<span class="source-line-no">097</span><span id="line-97"> * <pre></span>
+<span class="source-line-no">098</span><span id="line-98"> * INCLUDE &lt; SKIP &lt; INCLUDE_AND_NEXT_COL &lt; NEXT_COL &lt; INCLUDE_AND_SEEK_NEXT_ROW &lt; NEXT_ROW</span>
+<span class="source-line-no">099</span><span id="line-99"> * &lt; SEEK_NEXT_USING_HINT</span>
+<span class="source-line-no">100</span><span id="line-100"> * </pre></span>
+<span class="source-line-no">101</span><span id="line-101"> *</span>
+<span class="source-line-no">102</span><span id="line-102"> * Here, we have the following map to describe The Maximal Step Rule. if current return code (for</span>
+<span class="source-line-no">103</span><span id="line-103"> * previous sub-filters in filter list) is <strong>ReturnCode</strong>, and current filter returns</span>
+<span class="source-line-no">104</span><span id="line-104"> * <strong>localRC</strong>, then we should return map[ReturnCode][localRC] for the merged result,</span>
+<span class="source-line-no">105</span><span id="line-105"> * according to The Maximal Step Rule. <br/></span>
+<span class="source-line-no">106</span><span id="line-106"> *</span>
+<span class="source-line-no">107</span><span id="line-107"> * <pre></span>
+<span class="source-line-no">108</span><span id="line-108"> * LocalCode\ReturnCode INCLUDE INCLUDE_AND_NEXT_COL INCLUDE_AND_SEEK_NEXT_ROW SKIP NEXT_COL NEXT_ROW SEEK_NEXT_USING_HINT</span>
+<span class="source-line-no">109</span><span id="line-109"> * INCLUDE INCLUDE INCLUDE_AND_NEXT_COL INCLUDE_AND_SEEK_NEXT_ROW SKIP NEXT_COL NEXT_ROW SEEK_NEXT_USING_HINT</span>
+<span class="source-line-no">110</span><span id="line-110"> * INCLUDE_AND_NEXT_COL INCLUDE_AND_NEXT_COL INCLUDE_AND_NEXT_COL INCLUDE_AND_SEEK_NEXT_ROW NEXT_COL NEXT_COL NEXT_ROW SEEK_NEXT_USING_HINT</span>
+<span class="source-line-no">111</span><span id="line-111"> * INCLUDE_AND_SEEK_NEXT_ROW INCLUDE_AND_SEEK_NEXT_ROW INCLUDE_AND_SEEK_NEXT_ROW INCLUDE_AND_SEEK_NEXT_ROW NEXT_ROW NEXT_ROW NEXT_ROW SEEK_NEXT_USING_HINT</span>
+<span class="source-line-no">112</span><span id="line-112"> * SKIP SKIP NEXT_COL NEXT_ROW SKIP NEXT_COL NEXT_ROW SEEK_NEXT_USING_HINT</span>
+<span class="source-line-no">113</span><span id="line-113"> * NEXT_COL NEXT_COL NEXT_COL NEXT_ROW NEXT_COL NEXT_COL NEXT_ROW SEEK_NEXT_USING_HINT</span>
+<span class="source-line-no">114</span><span id="line-114"> * NEXT_ROW NEXT_ROW NEXT_ROW NEXT_ROW NEXT_ROW NEXT_ROW NEXT_ROW SEEK_NEXT_USING_HINT</span>
+<span class="source-line-no">115</span><span id="line-115"> * SEEK_NEXT_USING_HINT SEEK_NEXT_USING_HINT SEEK_NEXT_USING_HINT SEEK_NEXT_USING_HINT SEEK_NEXT_USING_HINT SEEK_NEXT_USING_HINT SEEK_NEXT_USING_HINT SEEK_NEXT_USING_HINT</span>
+<span class="source-line-no">116</span><span id="line-116"> * </pre></span>
+<span class="source-line-no">117</span><span id="line-117"> *</span>
+<span class="source-line-no">118</span><span id="line-118"> * @param rc Return code which is calculated by previous sub-filter(s) in filter list.</span>
+<span class="source-line-no">119</span><span id="line-119"> * @param localRC Return code of the current sub-filter in filter list.</span>
+<span class="source-line-no">120</span><span id="line-120"> * @return Return code which is merged by the return code of previous sub-filter(s) and the return</span>
+<span class="source-line-no">121</span><span id="line-121"> * code of current sub-filter.</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 ReturnCode mergeReturnCode(ReturnCode rc, ReturnCode localRC) {</span>
+<span class="source-line-no">124</span><span id="line-124"> if (rc == ReturnCode.SEEK_NEXT_USING_HINT) {</span>
+<span class="source-line-no">125</span><span id="line-125"> return ReturnCode.SEEK_NEXT_USING_HINT;</span>
+<span class="source-line-no">126</span><span id="line-126"> }</span>
+<span class="source-line-no">127</span><span id="line-127"> switch (localRC) {</span>
+<span class="source-line-no">128</span><span id="line-128"> case SEEK_NEXT_USING_HINT:</span>
+<span class="source-line-no">129</span><span id="line-129"> return ReturnCode.SEEK_NEXT_USING_HINT;</span>
+<span class="source-line-no">130</span><span id="line-130"> case INCLUDE:</span>
+<span class="source-line-no">131</span><span id="line-131"> return rc;</span>
+<span class="source-line-no">132</span><span id="line-132"> case INCLUDE_AND_NEXT_COL:</span>
+<span class="source-line-no">133</span><span id="line-133"> if (isInReturnCodes(rc, ReturnCode.INCLUDE, ReturnCode.INCLUDE_AND_NEXT_COL)) {</span>
+<span class="source-line-no">134</span><span id="line-134"> return ReturnCode.INCLUDE_AND_NEXT_COL;</span>
<span class="source-line-no">135</span><span id="line-135"> }</span>
-<span class="source-line-no">136</span><span id="line-136"> break;</span>
-<span class="source-line-no">137</span><span id="line-137"> case INCLUDE_AND_SEEK_NEXT_ROW:</span>
-<span class="source-line-no">138</span><span id="line-138"> if (</span>
-<span class="source-line-no">139</span><span id="line-139"> isInReturnCodes(rc, ReturnCode.INCLUDE, ReturnCode.INCLUDE_AND_NEXT_COL,</span>
-<span class="source-line-no">140</span><span id="line-140"> ReturnCode.INCLUDE_AND_SEEK_NEXT_ROW)</span>
-<span class="source-line-no">141</span><span id="line-141"> ) {</span>
-<span class="source-line-no">142</span><span id="line-142"> return ReturnCode.INCLUDE_AND_SEEK_NEXT_ROW;</span>
-<span class="source-line-no">143</span><span id="line-143"> }</span>
-<span class="source-line-no">144</span><span id="line-144"> if (isInReturnCodes(rc, ReturnCode.SKIP, ReturnCode.NEXT_COL, ReturnCode.NEXT_ROW)) {</span>
-<span class="source-line-no">145</span><span id="line-145"> return ReturnCode.NEXT_ROW;</span>
-<span class="source-line-no">146</span><span id="line-146"> }</span>
-<span class="source-line-no">147</span><span id="line-147"> break;</span>
-<span class="source-line-no">148</span><span id="line-148"> case SKIP:</span>
-<span class="source-line-no">149</span><span id="line-149"> if (isInReturnCodes(rc, ReturnCode.INCLUDE, ReturnCode.SKIP)) {</span>
-<span class="source-line-no">150</span><span id="line-150"> return ReturnCode.SKIP;</span>
-<span class="source-line-no">151</span><span id="line-151"> }</span>
-<span class="source-line-no">152</span><span id="line-152"> if (isInReturnCodes(rc, ReturnCode.INCLUDE_AND_NEXT_COL, ReturnCode.NEXT_COL)) {</span>
-<span class="source-line-no">153</span><span id="line-153"> return ReturnCode.NEXT_COL;</span>
-<span class="source-line-no">154</span><span id="line-154"> }</span>
-<span class="source-line-no">155</span><span id="line-155"> if (isInReturnCodes(rc, ReturnCode.INCLUDE_AND_SEEK_NEXT_ROW, ReturnCode.NEXT_ROW)) {</span>
-<span class="source-line-no">156</span><span id="line-156"> return ReturnCode.NEXT_ROW;</span>
-<span class="source-line-no">157</span><span id="line-157"> }</span>
-<span class="source-line-no">158</span><span id="line-158"> break;</span>
-<span class="source-line-no">159</span><span id="line-159"> case NEXT_COL:</span>
-<span class="source-line-no">160</span><span id="line-160"> if (</span>
-<span class="source-line-no">161</span><span id="line-161"> isInReturnCodes(rc, ReturnCode.INCLUDE, ReturnCode.INCLUDE_AND_NEXT_COL, ReturnCode.SKIP,</span>
-<span class="source-line-no">162</span><span id="line-162"> ReturnCode.NEXT_COL)</span>
-<span class="source-line-no">163</span><span id="line-163"> ) {</span>
-<span class="source-line-no">164</span><span id="line-164"> return ReturnCode.NEXT_COL;</span>
-<span class="source-line-no">165</span><span id="line-165"> }</span>
-<span class="source-line-no">166</span><span id="line-166"> if (isInReturnCodes(rc, ReturnCode.INCLUDE_AND_SEEK_NEXT_ROW, ReturnCode.NEXT_ROW)) {</span>
-<span class="source-line-no">167</span><span id="line-167"> return ReturnCode.NEXT_ROW;</span>
-<span class="source-line-no">168</span><span id="line-168"> }</span>
-<span class="source-line-no">169</span><span id="line-169"> break;</span>
-<span class="source-line-no">170</span><span id="line-170"> case NEXT_ROW:</span>
-<span class="source-line-no">171</span><span id="line-171"> return ReturnCode.NEXT_ROW;</span>
-<span class="source-line-no">172</span><span id="line-172"> }</span>
-<span class="source-line-no">173</span><span id="line-173"> throw new IllegalStateException(</span>
-<span class="source-line-no">174</span><span id="line-174"> "Received code is not valid. rc: " + rc + ", localRC: " + localRC);</span>
-<span class="source-line-no">175</span><span id="line-175"> }</span>
-<span class="source-line-no">176</span><span id="line-176"></span>
-<span class="source-line-no">177</span><span id="line-177"> private boolean isIncludeRelatedReturnCode(ReturnCode rc) {</span>
-<span class="source-line-no">178</span><span id="line-178"> return isInReturnCodes(rc, ReturnCode.INCLUDE, ReturnCode.INCLUDE_AND_NEXT_COL,</span>
-<span class="source-line-no">179</span><span id="line-179"> ReturnCode.INCLUDE_AND_SEEK_NEXT_ROW);</span>
-<span class="source-line-no">180</span><span id="line-180"> }</span>
-<span class="source-line-no">181</span><span id="line-181"></span>
-<span class="source-line-no">182</span><span id="line-182"> @Override</span>
-<span class="source-line-no">183</span><span id="line-183"> public ReturnCode filterCell(Cell c) throws IOException {</span>
-<span class="source-line-no">184</span><span id="line-184"> if (isEmpty()) {</span>
-<span class="source-line-no">185</span><span id="line-185"> return ReturnCode.INCLUDE;</span>
-<span class="source-line-no">186</span><span id="line-186"> }</span>
-<span class="source-line-no">187</span><span id="line-187"> ReturnCode rc = ReturnCode.INCLUDE;</span>
-<span class="source-line-no">188</span><span id="line-188"> this.seekHintFilters.clear();</span>
-<span class="source-line-no">189</span><span id="line-189"> int i = 0;</span>
-<span class="source-line-no">190</span><span id="line-190"> int n = filters.size();</span>
-<span class="source-line-no">191</span><span id="line-191"> for (; i < n; i++) {</span>
-<span class="source-line-no">192</span><span id="line-192"> Filter filter = filters.get(i);</span>
-<span class="source-line-no">193</span><span id="line-193"> if (filter.filterAllRemaining()) {</span>
-<span class="source-line-no">194</span><span id="line-194"> rc = ReturnCode.NEXT_ROW;</span>
-<span class="source-line-no">195</span><span id="line-195"> // See comment right after this loop</span>
-<span class="source-line-no">196</span><span id="line-196"> break;</span>
-<span class="source-line-no">197</span><span id="line-197"> }</span>
-<span class="source-line-no">198</span><span id="line-198"> ReturnCode localRC;</span>
-<span class="source-line-no">199</span><span id="line-199"> localRC = filter.filterCell(c);</span>
-<span class="source-line-no">200</span><span id="line-200"> if (localRC == ReturnCode.SEEK_NEXT_USING_HINT) {</span>
-<span class="source-line-no">201</span><span id="line-201"> seekHintFilters.add(filter);</span>
-<span class="source-line-no">202</span><span id="line-202"> }</span>
-<span class="source-line-no">203</span><span id="line-203"> rc = mergeReturnCode(rc, localRC);</span>
-<span class="source-line-no">204</span><span id="line-204"> // Only when rc is INCLUDE* case, we should pass the cell to the following sub-filters.</span>
-<span class="source-line-no">205</span><span id="line-205"> // otherwise we may mess up the global state (such as offset, count..) in the following</span>
-<span class="source-line-no">206</span><span id="line-206"> // sub-filters. (HBASE-20565)</span>
-<span class="source-line-no">207</span><span id="line-207"> if (!isIncludeRelatedReturnCode(rc)) {</span>
-<span class="source-line-no">208</span><span id="line-208"> // See comment right after this loop</span>
-<span class="source-line-no">209</span><span id="line-209"> break;</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"> // We have the preliminary return code. However, if there are remaining uncalled hintingFilters,</span>
-<span class="source-line-no">213</span><span id="line-213"> // they may return hints that allow us to seek ahead and skip reading and processing a lot of</span>
-<span class="source-line-no">214</span><span id="line-214"> // cells.</span>
-<span class="source-line-no">215</span><span id="line-215"> // Process the remaining hinting filters so that we can get all seek hints.</span>
-<span class="source-line-no">216</span><span id="line-216"> // The farthest key is computed in getNextCellHint()</span>
-<span class="source-line-no">217</span><span id="line-217"> if (++i < n) {</span>
-<span class="source-line-no">218</span><span id="line-218"> for (; i < n; i++) {</span>
-<span class="source-line-no">219</span><span id="line-219"> if (hintingFilters[i]) {</span>
-<span class="source-line-no">220</span><span id="line-220"> Filter filter = filters.get(i);</span>
-<span class="source-line-no">221</span><span id="line-221"> if (filter.filterCell(c) == ReturnCode.SEEK_NEXT_USING_HINT) {</span>
-<span class="source-line-no">222</span><span id="line-222"> seekHintFilters.add(filter);</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"> }</span>
-<span class="source-line-no">227</span><span id="line-227"></span>
-<span class="source-line-no">228</span><span id="line-228"> if (!seekHintFilters.isEmpty()) {</span>
-<span class="source-line-no">229</span><span id="line-229"> return ReturnCode.SEEK_NEXT_USING_HINT;</span>
-<span class="source-line-no">230</span><span id="line-230"> }</span>
-<span class="source-line-no">231</span><span id="line-231"> return rc;</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 reset() throws IOException {</span>
-<span class="source-line-no">236</span><span id="line-236"> for (int i = 0, n = filters.size(); i < n; i++) {</span>
-<span class="source-line-no">237</span><span id="line-237"> filters.get(i).reset();</span>
-<span class="source-line-no">238</span><span id="line-238"> }</span>
-<span class="source-line-no">239</span><span id="line-239"> seekHintFilters.clear();</span>
-<span class="source-line-no">240</span><span id="line-240"> }</span>
-<span class="source-line-no">241</span><span id="line-241"></span>
-<span class="source-line-no">242</span><span id="line-242"> @Override</span>
-<span class="source-line-no">243</span><span id="line-243"> public boolean filterRowKey(Cell firstRowCell) throws IOException {</span>
-<span class="source-line-no">244</span><span id="line-244"> if (isEmpty()) {</span>
-<span class="source-line-no">245</span><span id="line-245"> return super.filterRowKey(firstRowCell);</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 anyRowKeyFiltered = false;</span>
-<span class="source-line-no">248</span><span id="line-248"> boolean anyHintingPassed = false;</span>
-<span class="source-line-no">249</span><span id="line-249"> for (int i = 0, n = filters.size(); i < n; i++) {</span>
-<span class="source-line-no">250</span><span id="line-250"> Filter filter = filters.get(i);</span>
-<span class="source-line-no">251</span><span id="line-251"> if (filter.filterAllRemaining()) {</span>
-<span class="source-line-no">252</span><span id="line-252"> // We don't need to care about any later filters, as we end the scan immediately.</span>
-<span class="source-line-no">253</span><span id="line-253"> // TODO HBASE-28633 in the normal code path, filterAllRemaining() always gets checked</span>
-<span class="source-line-no">254</span><span id="line-254"> // before filterRowKey(). We should be able to remove this check.</span>
-<span class="source-line-no">255</span><span id="line-255"> return true;</span>
-<span class="source-line-no">256</span><span id="line-256"> } else if (filter.filterRowKey(firstRowCell)) {</span>
-<span class="source-line-no">257</span><span id="line-257"> // Can't just return true here, because there are some filters (such as PrefixFilter) which</span>
-<span class="source-line-no">258</span><span id="line-258"> // will catch the row changed event by filterRowKey(). If we return early here, those</span>
-<span class="source-line-no">259</span><span id="line-259"> // filters will have no chance to update their row state.</span>
-<span class="source-line-no">260</span><span id="line-260"> anyRowKeyFiltered = true;</span>
-<span class="source-line-no">261</span><span id="line-261"> } else if (hintingFilters[i]) {</span>
-<span class="source-line-no">262</span><span id="line-262"> // If filterRowKey returns false and this is a hinting filter, then we must not filter this</span>
-<span class="source-line-no">263</span><span id="line-263"> // rowkey.</span>
-<span class="source-line-no">264</span><span id="line-264"> // Otherwise this sub-filter doesn't get a chance to provide a seek hint, and the scan may</span>
-<span class="source-line-no">265</span><span id="line-265"> // regress into a full scan.</span>
-<span class="source-line-no">266</span><span id="line-266"> anyHintingPassed = true;</span>
-<span class="source-line-no">267</span><span id="line-267"> }</span>
-<span class="source-line-no">268</span><span id="line-268"> }</span>
-<span class="source-line-no">269</span><span id="line-269"> return anyRowKeyFiltered && !anyHintingPassed;</span>
-<span class="source-line-no">270</span><span id="line-270"> }</span>
-<span class="source-line-no">271</span><span id="line-271"></span>
-<span class="source-line-no">272</span><span id="line-272"> @Override</span>
-<span class="source-line-no">273</span><span id="line-273"> public boolean filterAllRemaining() throws IOException {</span>
-<span class="source-line-no">274</span><span id="line-274"> if (isEmpty()) {</span>
-<span class="source-line-no">275</span><span id="line-275"> return super.filterAllRemaining();</span>
-<span class="source-line-no">276</span><span id="line-276"> }</span>
-<span class="source-line-no">277</span><span id="line-277"> for (int i = 0, n = filters.size(); i < n; i++) {</span>
-<span class="source-line-no">278</span><span id="line-278"> if (filters.get(i).filterAllRemaining()) {</span>
-<span class="source-line-no">279</span><span id="line-279"> return true;</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"> return false;</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 boolean filterRow() throws IOException {</span>
-<span class="source-line-no">287</span><span id="line-287"> if (isEmpty()) {</span>
-<span class="source-line-no">288</span><span id="line-288"> return super.filterRow();</span>
-<span class="source-line-no">289</span><span id="line-289"> }</span>
-<span class="source-line-no">290</span><span id="line-290"> for (int i = 0, n = filters.size(); i < n; i++) {</span>
-<span class="source-line-no">291</span><span id="line-291"> Filter filter = filters.get(i);</span>
-<span class="source-line-no">292</span><span id="line-292"> if (filter.filterRow()) {</span>
-<span class="source-line-no">293</span><span id="line-293"> return true;</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"> return false;</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"> @Override</span>
-<span class="source-line-no">300</span><span id="line-300"> public Cell getNextCellHint(Cell currentCell) throws IOException {</span>
-<span class="source-line-no">301</span><span id="line-301"> if (isEmpty()) {</span>
-<span class="source-line-no">302</span><span id="line-302"> return super.getNextCellHint(currentCell);</span>
-<span class="source-line-no">303</span><span id="line-303"> }</span>
-<span class="source-line-no">304</span><span id="line-304"> Cell maxHint = null;</span>
-<span class="source-line-no">305</span><span id="line-305"> for (Filter filter : seekHintFilters) {</span>
-<span class="source-line-no">306</span><span id="line-306"> if (filter.filterAllRemaining()) {</span>
-<span class="source-line-no">307</span><span id="line-307"> continue;</span>
-<span class="source-line-no">308</span><span id="line-308"> }</span>
-<span class="source-line-no">309</span><span id="line-309"> Cell curKeyHint = filter.getNextCellHint(currentCell);</span>
-<span class="source-line-no">310</span><span id="line-310"> if (maxHint == null) {</span>
-<span class="source-line-no">311</span><span id="line-311"> maxHint = curKeyHint;</span>
-<span class="source-line-no">312</span><span id="line-312"> continue;</span>
-<span class="source-line-no">313</span><span id="line-313"> }</span>
-<span class="source-line-no">314</span><span id="line-314"> if (this.compareCell(maxHint, curKeyHint) < 0) {</span>
-<span class="source-line-no">315</span><span id="line-315"> maxHint = curKeyHint;</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"> return maxHint;</span>
-<span class="source-line-no">319</span><span id="line-319"> }</span>
-<span class="source-line-no">320</span><span id="line-320"></span>
-<span class="source-line-no">321</span><span id="line-321"> @Override</span>
-<span class="source-line-no">322</span><span id="line-322"> public boolean equals(Object obj) {</span>
-<span class="source-line-no">323</span><span id="line-323"> if (this == obj) {</span>
-<span class="source-line-no">324</span><span id="line-324"> return true;</span>
-<span class="source-line-no">325</span><span id="line-325"> }</span>
-<span class="source-line-no">326</span><span id="line-326"> if (!(obj instanceof FilterListWithAND)) {</span>
-<span class="source-line-no">327</span><span id="line-327"> return false;</span>
-<span class="source-line-no">328</span><span id="line-328"> }</span>
-<span class="source-line-no">329</span><span id="line-329"> FilterListWithAND f = (FilterListWithAND) obj;</span>
-<span class="source-line-no">330</span><span id="line-330"> return this.filters.equals(f.getFilters()) && this.seekHintFilters.equals(f.seekHintFilters);</span>
+<span class="source-line-no">136</span><span id="line-136"> if (isInReturnCodes(rc, ReturnCode.INCLUDE_AND_SEEK_NEXT_ROW)) {</span>
+<span class="source-line-no">137</span><span id="line-137"> return ReturnCode.INCLUDE_AND_SEEK_NEXT_ROW;</span>
+<span class="source-line-no">138</span><span id="line-138"> }</span>
+<span class="source-line-no">139</span><span id="line-139"> if (isInReturnCodes(rc, ReturnCode.SKIP, ReturnCode.NEXT_COL)) {</span>
+<span class="source-line-no">140</span><span id="line-140"> return ReturnCode.NEXT_COL;</span>
+<span class="source-line-no">141</span><span id="line-141"> }</span>
+<span class="source-line-no">142</span><span id="line-142"> if (isInReturnCodes(rc, ReturnCode.NEXT_ROW)) {</span>
+<span class="source-line-no">143</span><span id="line-143"> return ReturnCode.NEXT_ROW;</span>
+<span class="source-line-no">144</span><span id="line-144"> }</span>
+<span class="source-line-no">145</span><span id="line-145"> break;</span>
+<span class="source-line-no">146</span><span id="line-146"> case INCLUDE_AND_SEEK_NEXT_ROW:</span>
+<span class="source-line-no">147</span><span id="line-147"> if (</span>
+<span class="source-line-no">148</span><span id="line-148"> isInReturnCodes(rc, ReturnCode.INCLUDE, ReturnCode.INCLUDE_AND_NEXT_COL,</span>
+<span class="source-line-no">149</span><span id="line-149"> ReturnCode.INCLUDE_AND_SEEK_NEXT_ROW)</span>
+<span class="source-line-no">150</span><span id="line-150"> ) {</span>
+<span class="source-line-no">151</span><span id="line-151"> return ReturnCode.INCLUDE_AND_SEEK_NEXT_ROW;</span>
+<span class="source-line-no">152</span><span id="line-152"> }</span>
+<span class="source-line-no">153</span><span id="line-153"> if (isInReturnCodes(rc, ReturnCode.SKIP, ReturnCode.NEXT_COL, ReturnCode.NEXT_ROW)) {</span>
+<span class="source-line-no">154</span><span id="line-154"> return ReturnCode.NEXT_ROW;</span>
+<span class="source-line-no">155</span><span id="line-155"> }</span>
+<span class="source-line-no">156</span><span id="line-156"> break;</span>
+<span class="source-line-no">157</span><span id="line-157"> case SKIP:</span>
+<span class="source-line-no">158</span><span id="line-158"> if (isInReturnCodes(rc, ReturnCode.INCLUDE, ReturnCode.SKIP)) {</span>
+<span class="source-line-no">159</span><span id="line-159"> return ReturnCode.SKIP;</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 (isInReturnCodes(rc, ReturnCode.INCLUDE_AND_NEXT_COL, ReturnCode.NEXT_COL)) {</span>
+<span class="source-line-no">162</span><span id="line-162"> return ReturnCode.NEXT_COL;</span>
+<span class="source-line-no">163</span><span id="line-163"> }</span>
+<span class="source-line-no">164</span><span id="line-164"> if (isInReturnCodes(rc, ReturnCode.INCLUDE_AND_SEEK_NEXT_ROW, ReturnCode.NEXT_ROW)) {</span>
+<span class="source-line-no">165</span><span id="line-165"> return ReturnCode.NEXT_ROW;</span>
+<span class="source-line-no">166</span><span id="line-166"> }</span>
+<span class="source-line-no">167</span><span id="line-167"> break;</span>
+<span class="source-line-no">168</span><span id="line-168"> case NEXT_COL:</span>
+<span class="source-line-no">169</span><span id="line-169"> if (</span>
+<span class="source-line-no">170</span><span id="line-170"> isInReturnCodes(rc, ReturnCode.INCLUDE, ReturnCode.INCLUDE_AND_NEXT_COL, ReturnCode.SKIP,</span>
+<span class="source-line-no">171</span><span id="line-171"> ReturnCode.NEXT_COL)</span>
+<span class="source-line-no">172</span><span id="line-172"> ) {</span>
+<span class="source-line-no">173</span><span id="line-173"> return ReturnCode.NEXT_COL;</span>
+<span class="source-line-no">174</span><span id="line-174"> }</span>
+<span class="source-line-no">175</span><span id="line-175"> if (isInReturnCodes(rc, ReturnCode.INCLUDE_AND_SEEK_NEXT_ROW, ReturnCode.NEXT_ROW)) {</span>
+<span class="source-line-no">176</span><span id="line-176"> return ReturnCode.NEXT_ROW;</span>
+<span class="source-line-no">177</span><span id="line-177"> }</span>
+<span class="source-line-no">178</span><span id="line-178"> break;</span>
+<span class="source-line-no">179</span><span id="line-179"> case NEXT_ROW:</span>
+<span class="source-line-no">180</span><span id="line-180"> return ReturnCode.NEXT_ROW;</span>
+<span class="source-line-no">181</span><span id="line-181"> }</span>
+<span class="source-line-no">182</span><span id="line-182"> throw new IllegalStateException(</span>
+<span class="source-line-no">183</span><span id="line-183"> "Received code is not valid. rc: " + rc + ", localRC: " + localRC);</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"> private boolean isIncludeRelatedReturnCode(ReturnCode rc) {</span>
+<span class="source-line-no">187</span><span id="line-187"> return isInReturnCodes(rc, ReturnCode.INCLUDE, ReturnCode.INCLUDE_AND_NEXT_COL,</span>
+<span class="source-line-no">188</span><span id="line-188"> ReturnCode.INCLUDE_AND_SEEK_NEXT_ROW);</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 ReturnCode filterCell(Cell c) throws IOException {</span>
+<span class="source-line-no">193</span><span id="line-193"> if (isEmpty()) {</span>
+<span class="source-line-no">194</span><span id="line-194"> return ReturnCode.INCLUDE;</span>
+<span class="source-line-no">195</span><span id="line-195"> }</span>
+<span class="source-line-no">196</span><span id="line-196"> ReturnCode rc = ReturnCode.INCLUDE;</span>
+<span class="source-line-no">197</span><span id="line-197"> this.seekHintFilters.clear();</span>
+<span class="source-line-no">198</span><span id="line-198"> int i = 0;</span>
+<span class="source-line-no">199</span><span id="line-199"> int n = filters.size();</span>
+<span class="source-line-no">200</span><span id="line-200"> for (; i < n; i++) {</span>
+<span class="source-line-no">201</span><span id="line-201"> Filter filter = filters.get(i);</span>
+<span class="source-line-no">202</span><span id="line-202"> if (filter.filterAllRemaining()) {</span>
+<span class="source-line-no">203</span><span id="line-203"> rc = ReturnCode.NEXT_ROW;</span>
+<span class="source-line-no">204</span><span id="line-204"> // See comment right after this loop</span>
+<span class="source-line-no">205</span><span id="line-205"> break;</span>
+<span class="source-line-no">206</span><span id="line-206"> }</span>
+<span class="source-line-no">207</span><span id="line-207"> ReturnCode localRC;</span>
+<span class="source-line-no">208</span><span id="line-208"> localRC = filter.filterCell(c);</span>
+<span class="source-line-no">209</span><span id="line-209"> if (localRC == ReturnCode.SEEK_NEXT_USING_HINT) {</span>
+<span class="source-line-no">210</span><span id="line-210"> seekHintFilters.add(filter);</span>
+<span class="source-line-no">211</span><span id="line-211"> }</span>
+<span class="source-line-no">212</span><span id="line-212"> rc = mergeReturnCode(rc, localRC);</span>
+<span class="source-line-no">213</span><span id="line-213"> // Only when rc is INCLUDE* case, we should pass the cell to the following sub-filters.</span>
+<span class="source-line-no">214</span><span id="line-214"> // otherwise we may mess up the global state (such as offset, count..) in the following</span>
+<span class="source-line-no">215</span><span id="line-215"> // sub-filters. (HBASE-20565)</span>
+<span class="source-line-no">216</span><span id="line-216"> if (!isIncludeRelatedReturnCode(rc)) {</span>
+<span class="source-line-no">217</span><span id="line-217"> // See comment right after this loop</span>
+<span class="source-line-no">218</span><span id="line-218"> break;</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"> // We have the preliminary return code. However, if there are remaining uncalled hintingFilters,</span>
+<span class="source-line-no">222</span><span id="line-222"> // they may return hints that allow us to seek ahead and skip reading and processing a lot of</span>
+<span class="source-line-no">223</span><span id="line-223"> // cells.</span>
+<span class="source-line-no">224</span><span id="line-224"> // Process the remaining hinting filters so that we can get all seek hints.</span>
+<span class="source-line-no">225</span><span id="line-225"> // The farthest key is computed in getNextCellHint()</span>
+<span class="source-line-no">226</span><span id="line-226"> if (++i < n) {</span>
+<span class="source-line-no">227</span><span id="line-227"> for (; i < n; i++) {</span>
+<span class="source-line-no">228</span><span id="line-228"> if (hintingFilters[i]) {</span>
+<span class="source-line-no">229</span><span id="line-229"> Filter filter = filters.get(i);</span>
+<span class="source-line-no">230</span><span id="line-230"> if (filter.filterCell(c) == ReturnCode.SEEK_NEXT_USING_HINT) {</span>
+<span class="source-line-no">231</span><span id="line-231"> seekHintFilters.add(filter);</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"> }</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"> if (!seekHintFilters.isEmpty()) {</span>
+<span class="source-line-no">238</span><span id="line-238"> return ReturnCode.SEEK_NEXT_USING_HINT;</span>
+<span class="source-line-no">239</span><span id="line-239"> }</span>
+<span class="source-line-no">240</span><span id="line-240"> return rc;</span>
+<span class="source-line-no">241</span><span id="line-241"> }</span>
+<span class="source-line-no">242</span><span id="line-242"></span>
+<span class="source-line-no">243</span><span id="line-243"> @Override</span>
+<span class="source-line-no">244</span><span id="line-244"> public void reset() throws IOException {</span>
+<span class="source-line-no">245</span><span id="line-245"> for (int i = 0, n = filters.size(); i < n; i++) {</span>
+<span class="source-line-no">246</span><span id="line-246"> filters.get(i).reset();</span>
+<span class="source-line-no">247</span><span id="line-247"> }</span>
+<span class="source-line-no">248</span><span id="line-248"> seekHintFilters.clear();</span>
+<span class="source-line-no">249</span><span id="line-249"> Arrays.fill(rejectedByFilterRowKey, 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"> @Override</span>
+<span class="source-line-no">253</span><span id="line-253"> public boolean filterRowKey(Cell firstRowCell) throws IOException {</span>
+<span class="source-line-no">254</span><span id="line-254"> if (isEmpty()) {</span>
+<span class="source-line-no">255</span><span id="line-255"> return super.filterRowKey(firstRowCell);</span>
+<span class="source-line-no">256</span><span id="line-256"> }</span>
+<span class="source-line-no">257</span><span id="line-257"> Arrays.fill(rejectedByFilterRowKey, false);</span>
+<span class="source-line-no">258</span><span id="line-258"> boolean anyRowKeyFiltered = false;</span>
+<span class="source-line-no">259</span><span id="line-259"> boolean anyHintingPassed = false;</span>
+<span class="source-line-no">260</span><span id="line-260"> for (int i = 0, n = filters.size(); i < n; i++) {</span>
+<span class="source-line-no">261</span><span id="line-261"> Filter filter = filters.get(i);</span>
+<span class="source-line-no">262</span><span id="line-262"> if (filter.filterAllRemaining()) {</span>
+<span class="source-line-no">263</span><span id="line-263"> // We don't need to care about any later filters, as we end the scan immediately.</span>
+<span class="source-line-no">264</span><span id="line-264"> // TODO HBASE-28633 in the normal code path, filterAllRemaining() always gets checked</span>
+<span class="source-line-no">265</span><span id="line-265"> // before filterRowKey(). We should be able to remove this check.</span>
+<span class="source-line-no">266</span><span id="line-266"> return true;</span>
+<span class="source-line-no">267</span><span id="line-267"> } else if (filter.filterRowKey(firstRowCell)) {</span>
+<span class="source-line-no">268</span><span id="line-268"> // Can't just return true here, because there are some filters (such as PrefixFilter) which</span>
+<span class="source-line-no">269</span><span id="line-269"> // will catch the row changed event by filterRowKey(). If we return early here, those</span>
+<span class="source-line-no">270</span><span id="line-270"> // filters will have no chance to update their row state.</span>
+<span class="source-line-no">271</span><span id="line-271"> anyRowKeyFiltered = true;</span>
+<span class="source-line-no">272</span><span id="line-272"> rejectedByFilterRowKey[i] = true;</span>
+<span class="source-line-no">273</span><span id="line-273"> } else if (hintingFilters[i]) {</span>
+<span class="source-line-no">274</span><span id="line-274"> // If filterRowKey returns false and this is a hinting filter, then we must not filter this</span>
+<span class="source-line-no">275</span><span id="line-275"> // rowkey.</span>
+<span class="source-line-no">276</span><span id="line-276"> // Otherwise this sub-filter doesn't get a chance to provide a seek hint, and the scan may</span>
+<span class="source-line-no">277</span><span id="line-277"> // regress into a full scan.</span>
+<span class="source-line-no">278</span><span id="line-278"> anyHintingPassed = true;</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"> return anyRowKeyFiltered && !anyHintingPassed;</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 boolean filterAllRemaining() throws IOException {</span>
+<span class="source-line-no">286</span><span id="line-286"> if (isEmpty()) {</span>
+<span class="source-line-no">287</span><span id="line-287"> return super.filterAllRemaining();</span>
+<span class="source-line-no">288</span><span id="line-288"> }</span>
+<span class="source-line-no">289</span><span id="line-289"> for (int i = 0, n = filters.size(); i < n; i++) {</span>
+<span class="source-line-no">290</span><span id="line-290"> if (filters.get(i).filterAllRemaining()) {</span>
+<span class="source-line-no">291</span><span id="line-291"> return true;</span>
+<span class="source-line-no">292</span><span id="line-292"> }</span>
+<span class="source-line-no">293</span><span id="line-293"> }</span>
+<span class="source-line-no">294</span><span id="line-294"> return false;</span>
+<span class="source-line-no">295</span><span id="line-295"> }</span>
+<span class="source-line-no">296</span><span id="line-296"></span>
+<span class="source-line-no">297</span><span id="line-297"> @Override</span>
+<span class="source-line-no">298</span><span id="line-298"> public boolean filterRow() throws IOException {</span>
+<span class="source-line-no">299</span><span id="line-299"> if (isEmpty()) {</span>
+<span class="source-line-no">300</span><span id="line-300"> return super.filterRow();</span>
+<span class="source-line-no">301</span><span id="line-301"> }</span>
+<span class="source-line-no">302</span><span id="line-302"> for (int i = 0, n = filters.size(); i < n; i++) {</span>
+<span class="source-line-no">303</span><span id="line-303"> Filter filter = filters.get(i);</span>
+<span class="source-line-no">304</span><span id="line-304"> if (filter.filterRow()) {</span>
+<span class="source-line-no">305</span><span id="line-305"> return true;</span>
+<span class="source-line-no">306</span><span id="line-306"> }</span>
+<span class="source-line-no">307</span><span id="line-307"> }</span>
+<span class="source-line-no">308</span><span id="line-308"> return false;</span>
+<span class="source-line-no">309</span><span id="line-309"> }</span>
+<span class="source-line-no">310</span><span id="line-310"></span>
+<span class="source-line-no">311</span><span id="line-311"> @Override</span>
+<span class="source-line-no">312</span><span id="line-312"> public Cell getNextCellHint(Cell currentCell) throws IOException {</span>
+<span class="source-line-no">313</span><span id="line-313"> if (isEmpty()) {</span>
+<span class="source-line-no">314</span><span id="line-314"> return super.getNextCellHint(currentCell);</span>
+<span class="source-line-no">315</span><span id="line-315"> }</span>
+<span class="source-line-no">316</span><span id="line-316"> Cell maxHint = null;</span>
+<span class="source-line-no">317</span><span id="line-317"> for (Filter filter : seekHintFilters) {</span>
+<span class="source-line-no">318</span><span id="line-318"> if (filter.filterAllRemaining()) {</span>
+<span class="source-line-no">319</span><span id="line-319"> continue;</span>
+<span class="source-line-no">320</span><span id="line-320"> }</span>
+<span class="source-line-no">321</span><span id="line-321"> Cell curKeyHint = filter.getNextCellHint(currentCell);</span>
+<span class="source-line-no">322</span><span id="line-322"> if (maxHint == null) {</span>
+<span class="source-line-no">323</span><span id="line-323"> maxHint = curKeyHint;</span>
+<span class="source-line-no">324</span><span id="line-324"> continue;</span>
+<span class="source-line-no">325</span><span id="line-325"> }</span>
+<span class="source-line-no">326</span><span id="line-326"> if (this.compareCell(maxHint, curKeyHint) < 0) {</span>
+<span class="source-line-no">327</span><span id="line-327"> maxHint = curKeyHint;</span>
+<span class="source-line-no">328</span><span id="line-328"> }</span>
+<span class="source-line-no">329</span><span id="line-329"> }</span>
+<span class="source-line-no">330</span><span id="line-330"> return maxHint;</span>
<span class="source-line-no">331</span><span id="line-331"> }</span>
<span class="source-line-no">332</span><span id="line-332"></span>
-<span class="source-line-no">333</span><span id="line-333"> @Override</span>
-<span class="source-line-no">334</span><span id="line-334"> public int hashCode() {</span>
-<span class="source-line-no">335</span><span id="line-335"> return Objects.hash(this.seekHintFilters, this.filters);</span>
-<span class="source-line-no">336</span><span id="line-336"> }</span>
-<span class="source-line-no">337</span><span id="line-337">}</span>
+<span class="source-line-no">333</span><span id="line-333"> /**</span>
+<span class="source-line-no">334</span><span id="line-334"> * Maximal step: return the farthest hint among sub-filters that actually rejected the row. Only</span>
+<span class="source-line-no">335</span><span id="line-335"> * sub-filters whose {@link Filter#filterRowKey(Cell)} returned {@code true} are consulted,</span>
+<span class="source-line-no">336</span><span id="line-336"> * honouring the per-filter contract. Null hints are ignored; if no rejecting sub-filter provides</span>
+<span class="source-line-no">337</span><span id="line-337"> * a hint, return null.</span>
+<span class="source-line-no">338</span><span id="line-338"> */</span>
+<span class="source-line-no">339</span><span id="line-339"> @Override</span>
+<span class="source-line-no">340</span><span id="line-340"> public Cell getHintForRejectedRow(Cell firstRowCell) throws IOException {</span>
+<span class="source-line-no">341</span><span id="line-341"> if (isEmpty()) {</span>
+<span class="source-line-no">342</span><span id="line-342"> return super.getHintForRejectedRow(firstRowCell);</span>
+<span class="source-line-no">343</span><span id="line-343"> }</span>
+<span class="source-line-no">344</span><span id="line-344"> Cell maxHint = null;</span>
+<span class="source-line-no">345</span><span id="line-345"> for (int i = 0, n = filters.size(); i < n; i++) {</span>
+<span class="source-line-no">346</span><span id="line-346"> if (!rejectedByFilterRowKey[i]) {</span>
+<span class="source-line-no">347</span><span id="line-347"> continue;</span>
+<span class="source-line-no">348</span><span id="line-348"> }</span>
+<span class="source-line-no">349</span><span id="line-349"> Filter filter = filters.get(i);</span>
+<span class="source-line-no">350</span><span id="line-350"> if (filter.filterAllRemaining()) {</span>
+<span class="source-line-no">351</span><span id="line-351"> continue;</span>
+<span class="source-line-no">352</span><span id="line-352"> }</span>
+<span class="source-line-no">353</span><span id="line-353"> Cell hint = filter.getHintForRejectedRow(firstRowCell);</span>
+<span class="source-line-no">354</span><span id="line-354"> if (hint == null) {</span>
+<span class="source-line-no">355</span><span id="line-355"> continue;</span>
+<span class="source-line-no">356</span><span id="line-356"> }</span>
+<span class="source-line-no">357</span><span id="line-357"> if (maxHint == null || this.compareCell(maxHint, hint) < 0) {</span>
+<span class="source-line-no">358</span><span id="line-358"> maxHint = hint;</span>
+<span class="source-line-no">359</span><span id="line-359"> }</span>
+<span class="source-line-no">360</span><span id="line-360"> }</span>
+<span class="source-line-no">361</span><span id="line-361"> return maxHint;</span>
+<span class="source-line-no">362</span><span id="line-362"> }</span>
+<span class="source-line-no">363</span><span id="line-363"></span>
+<span class="source-line-no">364</span><span id="line-364"> /** Maximal step: return the farthest skip hint among sub-filters. */</span>
+<span class="source-line-no">365</span><span id="line-365"> @Override</span>
+<span class="source-line-no">366</span><span id="line-366"> public Cell getSkipHint(Cell skippedCell) throws IOException {</span>
+<span class="source-line-no">367</span><span id="line-367"> if (isEmpty()) {</span>
+<span class="source-line-no">368</span><span id="line-368"> return super.getSkipHint(skippedCell);</span>
+<span class="source-line-no">369</span><span id="line-369"> }</span>
+<span class="source-line-no">370</span><span id="line-370"> Cell maxHint = null;</span>
+<span class="source-line-no">371</span><span id="line-371"> for (int i = 0, n = filters.size(); i < n; i++) {</span>
+<span class="source-line-no">372</span><span id="line-372"> Filter filter = filters.get(i);</span>
+<span class="source-line-no">373</span><span id="line-373"> if (filter.filterAllRemaining()) {</span>
+<span class="source-line-no">374</span><span id="line-374"> continue;</span>
+<span class="source-line-no">375</span><span id="line-375"> }</span>
+<span class="source-line-no">376</span><span id="line-376"> Cell hint = filter.getSkipHint(skippedCell);</span>
+<span class="source-line-no">377</span><span id="line-377"> if (hint == null) {</span>
+<span class="source-line-no">378</span><span id="line-378"> continue;</span>
+<span class="source-line-no">379</span><span id="line-379"> }</span>
+<span class="source-line-no">380</span><span id="line-380"> if (maxHint == null || this.compareCell(maxHint, hint) < 0) {</span>
+<span class="source-line-no">381</span><span id="line-381"> maxHint = hint;</span>
+<span class="source-line-no">382</span><span id="line-382"> }</span>
+<span class="source-line-no">383</span><span id="line-383"> }</span>
+<span class="source-line-no">384</span><span id="line-384"> return maxHint;</span>
+<span class="source-line-no">385</span><span id="line-385"> }</span>
+<span class="source-line-no">386</span><span id="line-386"></span>
+<span class="source-line-no">387</span><span id="line-387"> @Override</span>
+<span class="source-line-no">388</span><span id="line-388"> public boolean equals(Object obj) {</span>
+<span class="source-line-no">389</span><span id="line-389"> if (this == obj) {</span>
+<span class="source-line-no">390</span><span id="line-390"> return true;</span>
+<span class="source-line-no">391</span><span id="line-391"> }</span>
+<span class="source-line-no">392</span><span id="line-392"> if (!(obj instanceof FilterListWithAND)) {</span>
+<span class="source-line-no">393</span><span id="line-393"> return false;</span>
+<span class="source-line-no">394</span><span id="line-394"> }</span>
+<span class="source-line-no">395</span><span id="line-395"> FilterListWithAND f = (FilterListWithAND) obj;</span>
+<span class="source-line-no">396</span><span id="line-396"> return this.filters.equals(f.getFilters()) && this.seekHintFilters.equals(f.seekHintFilters);</span>
+<span class="source-line-no">397</span><span id="line-397"> }</span>
+<span class="source-line-no">398</span><span id="line-398"></span>
+<span class="source-line-no">399</span><span id="line-399"> @Override</span>
+<span class="source-line-no">400</span><span id="line-400"> public int hashCode() {</span>
+<span class="source-line-no">401</span><span id="line-401"> return Objects.hash(this.seekHintFilters, this.filters);</span>
+<span class="source-line-no">402</span><span id="line-402"> }</span>
+<span class="source-line-no">403</span><span id="line-403">}</span>
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/filter/FilterListWithOR.html b/apidocs/src-html/org/apache/hadoop/hbase/filter/FilterListWithOR.html
index 7d8c580361d..c6e354efaa7 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/filter/FilterListWithOR.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/filter/FilterListWithOR.html
@@ -405,24 +405,76 @@
<span class="source-line-no">392</span><span id="line-392"> return minKeyHint;</span>
<span class="source-line-no">393</span><span id="line-393"> }</span>
<span class="source-line-no">394</span><span id="line-394"></span>
-<span class="source-line-no">395</span><span id="line-395"> @Override</span>
-<span class="source-line-no">396</span><span id="line-396"> public boolean equals(Object obj) {</span>
-<span class="source-line-no">397</span><span id="line-397"> if (this == obj) {</span>
-<span class="source-line-no">398</span><span id="line-398"> return true;</span>
-<span class="source-line-no">399</span><span id="line-399"> }</span>
-<span class="source-line-no">400</span><span id="line-400"> if (!(obj instanceof FilterListWithOR)) {</span>
-<span class="source-line-no">401</span><span id="line-401"> return false;</span>
-<span class="source-line-no">402</span><span id="line-402"> }</span>
-<span class="source-line-no">403</span><span id="line-403"> FilterListWithOR f = (FilterListWithOR) obj;</span>
-<span class="source-line-no">404</span><span id="line-404"> return this.filters.equals(f.getFilters()) && this.prevFilterRCList.equals(f.prevFilterRCList)</span>
-<span class="source-line-no">405</span><span id="line-405"> && this.prevCellList.equals(f.prevCellList);</span>
-<span class="source-line-no">406</span><span id="line-406"> }</span>
-<span class="source-line-no">407</span><span id="line-407"></span>
-<span class="source-line-no">408</span><span id="line-408"> @Override</span>
-<span class="source-line-no">409</span><span id="line-409"> public int hashCode() {</span>
-<span class="source-line-no">410</span><span id="line-410"> return Objects.hash(this.prevFilterRCList, this.prevCellList, this.filters);</span>
-<span class="source-line-no">411</span><span id="line-411"> }</span>
-<span class="source-line-no">412</span><span id="line-412">}</span>
+<span class="source-line-no">395</span><span id="line-395"> /**</span>
+<span class="source-line-no">396</span><span id="line-396"> * Minimal step: return the nearest hint. If any non-terminated sub-filter returns null, the</span>
+<span class="source-line-no">397</span><span id="line-397"> * composite cannot safely skip, so return null.</span>
+<span class="source-line-no">398</span><span id="line-398"> */</span>
+<span class="source-line-no">399</span><span id="line-399"> @Override</span>
+<span class="source-line-no">400</span><span id="line-400"> public Cell getHintForRejectedRow(Cell firstRowCell) throws IOException {</span>
+<span class="source-line-no">401</span><span id="line-401"> if (isEmpty()) {</span>
+<span class="source-line-no">402</span><span id="line-402"> return super.getHintForRejectedRow(firstRowCell);</span>
+<span class="source-line-no">403</span><span id="line-403"> }</span>
+<span class="source-line-no">404</span><span id="line-404"> Cell minHint = null;</span>
+<span class="source-line-no">405</span><span id="line-405"> for (int i = 0, n = filters.size(); i < n; i++) {</span>
+<span class="source-line-no">406</span><span id="line-406"> Filter filter = filters.get(i);</span>
+<span class="source-line-no">407</span><span id="line-407"> if (filter.filterAllRemaining()) {</span>
+<span class="source-line-no">408</span><span id="line-408"> continue;</span>
+<span class="source-line-no">409</span><span id="line-409"> }</span>
+<span class="source-line-no">410</span><span id="line-410"> Cell hint = filter.getHintForRejectedRow(firstRowCell);</span>
+<span class="source-line-no">411</span><span id="line-411"> if (hint == null) {</span>
+<span class="source-line-no">412</span><span id="line-412"> return null;</span>
+<span class="source-line-no">413</span><span id="line-413"> }</span>
+<span class="source-line-no">414</span><span id="line-414"> if (minHint == null || this.compareCell(minHint, hint) > 0) {</span>
+<span class="source-line-no">415</span><span id="line-415"> minHint = hint;</span>
+<span class="source-line-no">416</span><span id="line-416"> }</span>
+<span class="source-line-no">417</span><span id="line-417"> }</span>
+<span class="source-line-no">418</span><span id="line-418"> return minHint;</span>
+<span class="source-line-no">419</span><span id="line-419"> }</span>
+<span class="source-line-no">420</span><span id="line-420"></span>
+<span class="source-line-no">421</span><span id="line-421"> /**</span>
+<span class="source-line-no">422</span><span id="line-422"> * Minimal step: return the nearest skip hint. Null from any sub-filter collapses the entire</span>
+<span class="source-line-no">423</span><span id="line-423"> * result to null.</span>
+<span class="source-line-no">424</span><span id="line-424"> */</span>
+<span class="source-line-no">425</span><span id="line-425"> @Override</span>
+<span class="source-line-no">426</span><span id="line-426"> public Cell getSkipHint(Cell skippedCell) throws IOException {</span>
+<span class="source-line-no">427</span><span id="line-427"> if (isEmpty()) {</span>
+<span class="source-line-no">428</span><span id="line-428"> return super.getSkipHint(skippedCell);</span>
+<span class="source-line-no">429</span><span id="line-429"> }</span>
+<span class="source-line-no">430</span><span id="line-430"> Cell minHint = null;</span>
+<span class="source-line-no">431</span><span id="line-431"> for (int i = 0, n = filters.size(); i < n; i++) {</span>
+<span class="source-line-no">432</span><span id="line-432"> Filter filter = filters.get(i);</span>
+<span class="source-line-no">433</span><span id="line-433"> if (filter.filterAllRemaining()) {</span>
+<span class="source-line-no">434</span><span id="line-434"> continue;</span>
+<span class="source-line-no">435</span><span id="line-435"> }</span>
+<span class="source-line-no">436</span><span id="line-436"> Cell hint = filter.getSkipHint(skippedCell);</span>
+<span class="source-line-no">437</span><span id="line-437"> if (hint == null) {</span>
+<span class="source-line-no">438</span><span id="line-438"> return null;</span>
+<span class="source-line-no">439</span><span id="line-439"> }</span>
+<span class="source-line-no">440</span><span id="line-440"> if (minHint == null || this.compareCell(minHint, hint) > 0) {</span>
+<span class="source-line-no">441</span><span id="line-441"> minHint = hint;</span>
+<span class="source-line-no">442</span><span id="line-442"> }</span>
+<span class="source-line-no">443</span><span id="line-443"> }</span>
+<span class="source-line-no">444</span><span id="line-444"> return minHint;</span>
+<span class="source-line-no">445</span><span id="line-445"> }</span>
+<span class="source-line-no">446</span><span id="line-446"></span>
+<span class="source-line-no">447</span><span id="line-447"> @Override</span>
+<span class="source-line-no">448</span><span id="line-448"> public boolean equals(Object obj) {</span>
+<span class="source-line-no">449</span><span id="line-449"> if (this == obj) {</span>
+<span class="source-line-no">450</span><span id="line-450"> return true;</span>
+<span class="source-line-no">451</span><span id="line-451"> }</span>
+<span class="source-line-no">452</span><span id="line-452"> if (!(obj instanceof FilterListWithOR)) {</span>
+<span class="source-line-no">453</span><span id="line-453"> return false;</span>
+<span class="source-line-no">454</span><span id="line-454"> }</span>
+<span class="source-line-no">455</span><span id="line-455"> FilterListWithOR f = (FilterListWithOR) obj;</span>
+<span class="source-line-no">456</span><span id="line-456"> return this.filters.equals(f.getFilters()) && this.prevFilterRCList.equals(f.prevFilterRCList)</span>
+<span class="source-line-no">457</span><span id="line-457"> && this.prevCellList.equals(f.prevCellList);</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"> @Override</span>
+<span class="source-line-no">461</span><span id="line-461"> public int hashCode() {</span>
+<span class="source-line-no">462</span><span id="line-462"> return Objects.hash(this.prevFilterRCList, this.prevCellList, this.filters);</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>
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.html b/apidocs/src-html/org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.html
index 70dae8a95af..1d8106064c4 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.html
@@ -186,53 +186,76 @@
<span class="source-line-no">173</span><span id="line-173"> return PrivateCellUtil.createFirstOnRowCol(cell, hint, 0, hint.length);</span>
<span class="source-line-no">174</span><span id="line-174"> }</span>
<span class="source-line-no">175</span><span id="line-175"></span>
-<span class="source-line-no">176</span><span id="line-176"> public TreeSet<byte[]> createTreeSet() {</span>
-<span class="source-line-no">177</span><span id="line-177"> return new TreeSet<>(new Comparator<Object>() {</span>
-<span class="source-line-no">178</span><span id="line-178"> @Override</span>
-<span class="source-line-no">179</span><span id="line-179"> public int compare(Object o1, Object o2) {</span>
-<span class="source-line-no">180</span><span id="line-180"> if (o1 == null || o2 == null) throw new IllegalArgumentException("prefixes can't be null");</span>
-<span class="source-line-no">181</span><span id="line-181"></span>
-<span class="source-line-no">182</span><span id="line-182"> byte[] b1 = (byte[]) o1;</span>
-<span class="source-line-no">183</span><span id="line-183"> byte[] b2 = (byte[]) o2;</span>
-<span class="source-line-no">184</span><span id="line-184"> return Bytes.compareTo(b1, 0, b1.length, b2, 0, b2.length);</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"> }</span>
-<span class="source-line-no">188</span><span id="line-188"></span>
-<span class="source-line-no">189</span><span id="line-189"> @Override</span>
-<span class="source-line-no">190</span><span id="line-190"> public String toString() {</span>
-<span class="source-line-no">191</span><span id="line-191"> return toString(MAX_LOG_PREFIXES);</span>
-<span class="source-line-no">192</span><span id="line-192"> }</span>
-<span class="source-line-no">193</span><span id="line-193"></span>
-<span class="source-line-no">194</span><span id="line-194"> protected String toString(int maxPrefixes) {</span>
-<span class="source-line-no">195</span><span id="line-195"> StringBuilder prefixes = new StringBuilder();</span>
-<span class="source-line-no">196</span><span id="line-196"></span>
-<span class="source-line-no">197</span><span id="line-197"> int count = 0;</span>
-<span class="source-line-no">198</span><span id="line-198"> for (byte[] ba : this.sortedPrefixes) {</span>
-<span class="source-line-no">199</span><span id="line-199"> if (count >= maxPrefixes) {</span>
-<span class="source-line-no">200</span><span id="line-200"> break;</span>
-<span class="source-line-no">201</span><span id="line-201"> }</span>
-<span class="source-line-no">202</span><span id="line-202"> ++count;</span>
-<span class="source-line-no">203</span><span id="line-203"> prefixes.append(Bytes.toStringBinary(ba));</span>
-<span class="source-line-no">204</span><span id="line-204"> if (count < this.sortedPrefixes.size() && count < maxPrefixes) {</span>
-<span class="source-line-no">205</span><span id="line-205"> prefixes.append(", ");</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">209</span><span id="line-209"> return String.format("%s (%d/%d): [%s]", this.getClass().getSimpleName(), count,</span>
-<span class="source-line-no">210</span><span id="line-210"> this.sortedPrefixes.size(), prefixes.toString());</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 boolean equals(Object obj) {</span>
-<span class="source-line-no">215</span><span id="line-215"> return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);</span>
-<span class="source-line-no">216</span><span id="line-216"> }</span>
-<span class="source-line-no">217</span><span id="line-217"></span>
-<span class="source-line-no">218</span><span id="line-218"> @Override</span>
-<span class="source-line-no">219</span><span id="line-219"> public int hashCode() {</span>
-<span class="source-line-no">220</span><span id="line-220"> return Objects.hash(this.sortedPrefixes);</span>
-<span class="source-line-no">221</span><span id="line-221"> }</span>
-<span class="source-line-no">222</span><span id="line-222">}</span>
+<span class="source-line-no">176</span><span id="line-176"> @Override</span>
+<span class="source-line-no">177</span><span id="line-177"> public Cell getSkipHint(Cell skippedCell) throws IOException {</span>
+<span class="source-line-no">178</span><span id="line-178"> if (sortedPrefixes.isEmpty()) {</span>
+<span class="source-line-no">179</span><span id="line-179"> return null;</span>
+<span class="source-line-no">180</span><span id="line-180"> }</span>
+<span class="source-line-no">181</span><span id="line-181"> byte[] qualifier = CellUtil.cloneQualifier(skippedCell);</span>
+<span class="source-line-no">182</span><span id="line-182"> TreeSet<byte[]> lesserOrEqual = (TreeSet<byte[]>) sortedPrefixes.headSet(qualifier, true);</span>
+<span class="source-line-no">183</span><span id="line-183"> byte[] target;</span>
+<span class="source-line-no">184</span><span id="line-184"> if (lesserOrEqual.isEmpty()) {</span>
+<span class="source-line-no">185</span><span id="line-185"> target = sortedPrefixes.first();</span>
+<span class="source-line-no">186</span><span id="line-186"> } else {</span>
+<span class="source-line-no">187</span><span id="line-187"> byte[] largest = lesserOrEqual.last();</span>
+<span class="source-line-no">188</span><span id="line-188"> if (Bytes.startsWith(qualifier, largest)) {</span>
+<span class="source-line-no">189</span><span id="line-189"> return null;</span>
+<span class="source-line-no">190</span><span id="line-190"> }</span>
+<span class="source-line-no">191</span><span id="line-191"> target = sortedPrefixes.higher(largest);</span>
+<span class="source-line-no">192</span><span id="line-192"> if (target == null) {</span>
+<span class="source-line-no">193</span><span id="line-193"> return null;</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"> return PrivateCellUtil.createFirstOnRowCol(skippedCell, target, 0, target.length);</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>
+<span class="source-line-no">199</span><span id="line-199"> public TreeSet<byte[]> createTreeSet() {</span>
+<span class="source-line-no">200</span><span id="line-200"> return new TreeSet<>(new Comparator<Object>() {</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 int compare(Object o1, Object o2) {</span>
+<span class="source-line-no">203</span><span id="line-203"> if (o1 == null || o2 == null) throw new IllegalArgumentException("prefixes can't be null");</span>
+<span class="source-line-no">204</span><span id="line-204"></span>
+<span class="source-line-no">205</span><span id="line-205"> byte[] b1 = (byte[]) o1;</span>
+<span class="source-line-no">206</span><span id="line-206"> byte[] b2 = (byte[]) o2;</span>
+<span class="source-line-no">207</span><span id="line-207"> return Bytes.compareTo(b1, 0, b1.length, b2, 0, b2.length);</span>
+<span class="source-line-no">208</span><span id="line-208"> }</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"> @Override</span>
+<span class="source-line-no">213</span><span id="line-213"> public String toString() {</span>
+<span class="source-line-no">214</span><span id="line-214"> return toString(MAX_LOG_PREFIXES);</span>
+<span class="source-line-no">215</span><span id="line-215"> }</span>
+<span class="source-line-no">216</span><span id="line-216"></span>
+<span class="source-line-no">217</span><span id="line-217"> protected String toString(int maxPrefixes) {</span>
+<span class="source-line-no">218</span><span id="line-218"> StringBuilder prefixes = new StringBuilder();</span>
+<span class="source-line-no">219</span><span id="line-219"></span>
+<span class="source-line-no">220</span><span id="line-220"> int count = 0;</span>
+<span class="source-line-no">221</span><span id="line-221"> for (byte[] ba : this.sortedPrefixes) {</span>
+<span class="source-line-no">222</span><span id="line-222"> if (count >= maxPrefixes) {</span>
+<span class="source-line-no">223</span><span id="line-223"> break;</span>
+<span class="source-line-no">224</span><span id="line-224"> }</span>
+<span class="source-line-no">225</span><span id="line-225"> ++count;</span>
+<span class="source-line-no">226</span><span id="line-226"> prefixes.append(Bytes.toStringBinary(ba));</span>
+<span class="source-line-no">227</span><span id="line-227"> if (count < this.sortedPrefixes.size() && count < maxPrefixes) {</span>
+<span class="source-line-no">228</span><span id="line-228"> prefixes.append(", ");</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"></span>
+<span class="source-line-no">232</span><span id="line-232"> return String.format("%s (%d/%d): [%s]", this.getClass().getSimpleName(), count,</span>
+<span class="source-line-no">233</span><span id="line-233"> this.sortedPrefixes.size(), prefixes.toString());</span>
+<span class="source-line-no">234</span><span id="line-234"> }</span>
+<span class="source-line-no">235</span><span id="line-235"></span>
+<span class="source-line-no">236</span><span id="line-236"> @Override</span>
+<span class="source-line-no">237</span><span id="line-237"> public boolean equals(Object obj) {</span>
+<span class="source-line-no">238</span><span id="line-238"> return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);</span>
+<span class="source-line-no">239</span><span id="line-239"> }</span>
+<span class="source-line-no">240</span><span id="line-240"></span>
+<span class="source-line-no">241</span><span id="line-241"> @Override</span>
+<span class="source-line-no">242</span><span id="line-242"> public int hashCode() {</span>
+<span class="source-line-no">243</span><span id="line-243"> return Objects.hash(this.sortedPrefixes);</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>
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/filter/SkipFilter.html b/apidocs/src-html/org/apache/hadoop/hbase/filter/SkipFilter.html
index c31191a7d0a..31a0f1e52fc 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/filter/SkipFilter.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/filter/SkipFilter.html
@@ -155,25 +155,35 @@
<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"> @Override</span>
-<span class="source-line-no">145</span><span id="line-145"> public boolean isFamilyEssential(byte[] name) throws IOException {</span>
-<span class="source-line-no">146</span><span id="line-146"> return filter.isFamilyEssential(name);</span>
+<span class="source-line-no">145</span><span id="line-145"> public Cell getHintForRejectedRow(Cell firstRowCell) throws IOException {</span>
+<span class="source-line-no">146</span><span id="line-146"> return filter.getHintForRejectedRow(firstRowCell);</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"> @Override</span>
-<span class="source-line-no">150</span><span id="line-150"> public String toString() {</span>
-<span class="source-line-no">151</span><span id="line-151"> return this.getClass().getSimpleName() + " " + this.filter.toString();</span>
+<span class="source-line-no">150</span><span id="line-150"> public Cell getSkipHint(Cell skippedCell) throws IOException {</span>
+<span class="source-line-no">151</span><span id="line-151"> return filter.getSkipHint(skippedCell);</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"> @Override</span>
-<span class="source-line-no">155</span><span id="line-155"> public boolean equals(Object obj) {</span>
-<span class="source-line-no">156</span><span id="line-156"> return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);</span>
+<span class="source-line-no">155</span><span id="line-155"> public boolean isFamilyEssential(byte[] name) throws IOException {</span>
+<span class="source-line-no">156</span><span id="line-156"> return filter.isFamilyEssential(name);</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"> @Override</span>
-<span class="source-line-no">160</span><span id="line-160"> public int hashCode() {</span>
-<span class="source-line-no">161</span><span id="line-161"> return Objects.hash(this.filter);</span>
+<span class="source-line-no">160</span><span id="line-160"> public String toString() {</span>
+<span class="source-line-no">161</span><span id="line-161"> return this.getClass().getSimpleName() + " " + this.filter.toString();</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">163</span><span id="line-163"></span>
+<span class="source-line-no">164</span><span id="line-164"> @Override</span>
+<span class="source-line-no">165</span><span id="line-165"> public boolean equals(Object obj) {</span>
+<span class="source-line-no">166</span><span id="line-166"> return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);</span>
+<span class="source-line-no">167</span><span id="line-167"> }</span>
+<span class="source-line-no">168</span><span id="line-168"></span>
+<span class="source-line-no">169</span><span id="line-169"> @Override</span>
+<span class="source-line-no">170</span><span id="line-170"> public int hashCode() {</span>
+<span class="source-line-no">171</span><span id="line-171"> return Objects.hash(this.filter);</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>
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/filter/WhileMatchFilter.html b/apidocs/src-html/org/apache/hadoop/hbase/filter/WhileMatchFilter.html
index 27cdc423769..fb13514183d 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/filter/WhileMatchFilter.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/filter/WhileMatchFilter.html
@@ -153,25 +153,35 @@
<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 boolean isFamilyEssential(byte[] name) throws IOException {</span>
-<span class="source-line-no">144</span><span id="line-144"> return filter.isFamilyEssential(name);</span>
+<span class="source-line-no">143</span><span id="line-143"> public Cell getHintForRejectedRow(Cell firstRowCell) throws IOException {</span>
+<span class="source-line-no">144</span><span id="line-144"> return filter.getHintForRejectedRow(firstRowCell);</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 String toString() {</span>
-<span class="source-line-no">149</span><span id="line-149"> return this.getClass().getSimpleName() + " " + this.filter.toString();</span>
+<span class="source-line-no">148</span><span id="line-148"> public Cell getSkipHint(Cell skippedCell) throws IOException {</span>
+<span class="source-line-no">149</span><span id="line-149"> return filter.getSkipHint(skippedCell);</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 boolean equals(Object obj) {</span>
-<span class="source-line-no">154</span><span id="line-154"> return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);</span>
+<span class="source-line-no">153</span><span id="line-153"> public boolean isFamilyEssential(byte[] name) throws IOException {</span>
+<span class="source-line-no">154</span><span id="line-154"> return filter.isFamilyEssential(name);</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"> @Override</span>
-<span class="source-line-no">158</span><span id="line-158"> public int hashCode() {</span>
-<span class="source-line-no">159</span><span id="line-159"> return Objects.hash(this.filter);</span>
+<span class="source-line-no">158</span><span id="line-158"> public String toString() {</span>
+<span class="source-line-no">159</span><span id="line-159"> return this.getClass().getSimpleName() + " " + this.filter.toString();</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">161</span><span id="line-161"></span>
+<span class="source-line-no">162</span><span id="line-162"> @Override</span>
+<span class="source-line-no">163</span><span id="line-163"> public boolean equals(Object obj) {</span>
+<span class="source-line-no">164</span><span id="line-164"> return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);</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"> @Override</span>
+<span class="source-line-no">168</span><span id="line-168"> public int hashCode() {</span>
+<span class="source-line-no">169</span><span id="line-169"> return Objects.hash(this.filter);</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>
diff --git a/books/apache-hbase-reference-guide-dark-mode.pdf b/books/apache-hbase-reference-guide-dark-mode.pdf
index 43a6c1853a3..ab8bebdf0e4 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 a70e9b0c29e..0e1e31dc900 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 2d1296df5d8..3f244b05c81 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-05-14
+ | 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-05-16
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
@@ -109,10 +109,10 @@
<th><img src="images/icon_warning_sml.gif" /> Warnings</th>
<th><img src="images/icon_error_sml.gif" /> Errors</th></tr>
<tr class="b">
-<td>5301</td>
+<td>5305</td>
<td>0</td>
<td>0</td>
-<td>1844</td></tr></table></section><section><a id="Files"></a>
+<td>1830</td></tr></table></section><section><a id="Files"></a>
<h2>Files</h2>
<table class="table table-striped">
<tr class="a">
@@ -526,47 +526,37 @@
<td>0</td>
<td>1</td></tr>
<tr class="a">
-<td><a href="#org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestAdmin.java">org/apache/hadoop/hbase/client/TestAdmin.java</a></td>
-<td>0</td>
-<td>0</td>
-<td>1</td></tr>
-<tr class="b">
<td><a href="#org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestAsyncRegionAdminApi.java">org/apache/hadoop/hbase/client/TestAsyncRegionAdminApi.java</a></td>
<td>0</td>
<td>0</td>
<td>2</td></tr>
-<tr class="a">
+<tr class="b">
<td><a href="#org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestAsyncReplicationAdminApi.java">org/apache/hadoop/hbase/client/TestAsyncReplicationAdminApi.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
-<tr class="b">
+<tr class="a">
<td><a href="#org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestAvoidCellReferencesIntoShippedBlocks.java">org/apache/hadoop/hbase/client/TestAvoidCellReferencesIntoShippedBlocks.java</a></td>
<td>0</td>
<td>0</td>
-<td>3</td></tr>
-<tr class="a">
+<td>2</td></tr>
+<tr class="b">
<td><a href="#org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestBlockEvictionFromClient.java">org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.java</a></td>
<td>0</td>
<td>0</td>
-<td>4</td></tr>
-<tr class="b">
+<td>2</td></tr>
+<tr class="a">
<td><a href="#org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestBufferedMutatorParams.java">org/apache/hadoop/hbase/client/TestBufferedMutatorParams.java</a></td>
<td>0</td>
<td>0</td>
<td>3</td></tr>
-<tr class="a">
-<td><a href="#org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestClientSideRegionScanner.java">org/apache/hadoop/hbase/client/TestClientSideRegionScanner.java</a></td>
-<td>0</td>
-<td>0</td>
-<td>1</td></tr>
<tr class="b">
-<td><a href="#org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestImmutableScan.java">org/apache/hadoop/hbase/client/TestImmutableScan.java</a></td>
+<td><a href="#org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestClientSideRegionScanner.java">org/apache/hadoop/hbase/client/TestClientSideRegionScanner.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
<tr class="a">
-<td><a href="#org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestIncrementsFromClientSide.java">org/apache/hadoop/hbase/client/TestIncrementsFromClientSide.java</a></td>
+<td><a href="#org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestImmutableScan.java">org/apache/hadoop/hbase/client/TestImmutableScan.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
@@ -574,19 +564,19 @@
<td><a href="#org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestMultipleTimestamps.java">org/apache/hadoop/hbase/client/TestMultipleTimestamps.java</a></td>
<td>0</td>
<td>0</td>
-<td>26</td></tr>
+<td>20</td></tr>
<tr class="a">
-<td><a href="#org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestPutWithDelete.java">org/apache/hadoop/hbase/client/TestPutWithDelete.java</a></td>
+<td><a href="#org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestReplicaWithCluster.java">org/apache/hadoop/hbase/client/TestReplicaWithCluster.java</a></td>
<td>0</td>
<td>0</td>
-<td>2</td></tr>
+<td>1</td></tr>
<tr class="b">
-<td><a href="#org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestReplicaWithCluster.java">org/apache/hadoop/hbase/client/TestReplicaWithCluster.java</a></td>
+<td><a href="#org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestReplicasClient.java">org/apache/hadoop/hbase/client/TestReplicasClient.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
<tr class="a">
-<td><a href="#org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestReplicasClient.java">org/apache/hadoop/hbase/client/TestReplicasClient.java</a></td>
+<td><a href="#org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestResult.java">org/apache/hadoop/hbase/client/TestResult.java</a></td>
<td>0</td>
<td>0</td>
<td>1</td></tr>
@@ -604,7 +594,7 @@
<td><a href="#org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestTimestampsFilter.java">org/apache/hadoop/hbase/client/TestTimestampsFilter.java</a></td>
<td>0</td>
<td>0</td>
-<td>14</td></tr>
+<td>12</td></tr>
<tr class="a">
<td><a href="#org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2Fcoprocessor.2FAggregationClient.java">org/apache/hadoop/hbase/client/coprocessor/AggregationClient.java</a></td>
<td>0</td>
@@ -3655,7 +3645,7 @@
<tr class="b">
<td></td>
<td><a class="externalLink" href="https://checkstyle.org/checks/blocks/needbraces.html">NeedBraces</a></td>
-<td>865</td>
+<td>864</td>
<td><img src="images/icon_error_sml.gif" /> Error</td></tr>
<tr class="a">
<td>coding</td>
@@ -3723,7 +3713,7 @@
<tr class="b">
<td></td>
<td><a class="externalLink" href="https://checkstyle.org/checks/javadoc/nonemptyatclausedescription.html">NonEmptyAtclauseDescription</a></td>
-<td>43</td>
+<td>31</td>
<td><img src="images/icon_error_sml.gif" /> Error</td></tr>
<tr class="a">
<td>misc</td>
@@ -3746,7 +3736,7 @@
<tr class="b">
<td></td>
<td><a class="externalLink" href="https://checkstyle.org/checks/sizes/methodlength.html">MethodLength</a></td>
-<td>62</td>
+<td>61</td>
<td><img src="images/icon_error_sml.gif" /> Error</td></tr>
<tr class="a">
<td>whitespace</td>
@@ -5781,21 +5771,7 @@
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>165</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestAdmin.java"></a>
-<h3>org/apache/hadoop/hbase/client/TestAdmin.java</h3>
-<table class="table table-striped">
-<tr class="a">
-<th>Severity</th>
-<th>Category</th>
-<th>Rule</th>
-<th>Message</th>
-<th>Line</th></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" /> Error</td>
-<td>sizes</td>
-<td>MethodLength</td>
-<td>Method testCreateTableWithRegions length is 152 lines (max allowed is 150).</td>
-<td>174</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestAsyncRegionAdminApi.java"></a>
+<td>165</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestAsyncRegionAdminApi.java"></a>
<h3>org/apache/hadoop/hbase/client/TestAsyncRegionAdminApi.java</h3>
<table class="table table-striped">
<tr class="a">
@@ -5843,19 +5819,13 @@
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>101</td></tr>
+<td>119</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>124</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>blocks</td>
<td>EmptyBlock</td>
<td>Must have at least one statement.</td>
-<td>248</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestBlockEvictionFromClient.java"></a>
+<td>243</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestBlockEvictionFromClient.java"></a>
<h3>org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.java</h3>
<table class="table table-striped">
<tr class="a">
@@ -5869,25 +5839,13 @@
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>112</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" /> Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>133</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" /> Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>141</td></tr>
+<td>129</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>151</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestBufferedMutatorParams.java"></a>
+<td>137</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestBufferedMutatorParams.java"></a>
<h3>org/apache/hadoop/hbase/client/TestBufferedMutatorParams.java</h3>
<table class="table table-striped">
<tr class="a">
@@ -5927,7 +5885,7 @@
<td>design</td>
<td>FinalClass</td>
<td>Class FiltersRowsLessThan5 should be declared as final.</td>
-<td>352</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestImmutableScan.java"></a>
+<td>348</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestImmutableScan.java"></a>
<h3>org/apache/hadoop/hbase/client/TestImmutableScan.java</h3>
<table class="table table-striped">
<tr class="a">
@@ -5941,21 +5899,7 @@
<td>sizes</td>
<td>MethodLength</td>
<td>Method testUnmodifiableSetters length is 187 lines (max allowed is 150).</td>
-<td>113</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestIncrementsFromClientSide.java"></a>
-<h3>org/apache/hadoop/hbase/client/TestIncrementsFromClientSide.java</h3>
-<table class="table table-striped">
-<tr class="a">
-<th>Severity</th>
-<th>Category</th>
-<th>Rule</th>
-<th>Message</th>
-<th>Line</th></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" /> Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>98</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestMultipleTimestamps.java"></a>
+<td>113</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestMultipleTimestamps.java"></a>
<h3>org/apache/hadoop/hbase/client/TestMultipleTimestamps.java</h3>
<table class="table table-striped">
<tr class="a">
@@ -5966,161 +5910,125 @@
<th>Line</th></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" /> Error</td>
-<td>imports</td>
-<td>AvoidStarImport</td>
-<td>Using the '.*' form of import should be avoided - org.junit.Assert.*.</td>
-<td>20</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" /> Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>65</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" /> Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>73</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" /> Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>81</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" /> Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>89</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" /> Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>201</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>316</td></tr>
+<td>286</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>346</td></tr>
+<td>314</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>371</td></tr>
+<td>337</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>396</td></tr>
+<td>360</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>431</td></tr>
+<td>393</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>432</td></tr>
+<td>394</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>444</td></tr>
+<td>406</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>445</td></tr>
+<td>407</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>448</td></tr>
+<td>410</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>461</td></tr>
+<td>423</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>465</td></tr>
+<td>427</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>479</td></tr>
+<td>441</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>480</td></tr>
+<td>442</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>497</td></tr>
+<td>459</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>498</td></tr>
+<td>460</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>509</td></tr>
+<td>471</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>510</td></tr>
+<td>472</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>517</td></tr>
+<td>479</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>518</td></tr>
+<td>480</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>525</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestPutWithDelete.java"></a>
-<h3>org/apache/hadoop/hbase/client/TestPutWithDelete.java</h3>
+<td>487</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestReplicaWithCluster.java"></a>
+<h3>org/apache/hadoop/hbase/client/TestReplicaWithCluster.java</h3>
<table class="table table-striped">
<tr class="a">
<th>Severity</th>
@@ -6130,17 +6038,11 @@
<th>Line</th></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" /> Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>51</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" /> Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>59</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestReplicaWithCluster.java"></a>
-<h3>org/apache/hadoop/hbase/client/TestReplicaWithCluster.java</h3>
+<td>blocks</td>
+<td>NeedBraces</td>
+<td>'if' construct must use '{}'s.</td>
+<td>269</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestReplicasClient.java"></a>
+<h3>org/apache/hadoop/hbase/client/TestReplicasClient.java</h3>
<table class="table table-striped">
<tr class="a">
<th>Severity</th>
@@ -6153,8 +6055,8 @@
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>271</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestReplicasClient.java"></a>
-<h3>org/apache/hadoop/hbase/client/TestReplicasClient.java</h3>
+<td>267</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestResult.java"></a>
+<h3>org/apache/hadoop/hbase/client/TestResult.java</h3>
<table class="table table-striped">
<tr class="a">
<th>Severity</th>
@@ -6164,10 +6066,10 @@
<th>Line</th></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" /> Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>269</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestScannerTimeout.java"></a>
+<td>imports</td>
+<td>AvoidStarImport</td>
+<td>Using the '.*' form of import should be avoided - org.hamcrest.Matchers.*.</td>
+<td>21</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestScannerTimeout.java"></a>
<h3>org/apache/hadoop/hbase/client/TestScannerTimeout.java</h3>
<table class="table table-striped">
<tr class="a">
@@ -6181,19 +6083,19 @@
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>64</td></tr>
+<td>59</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>83</td></tr>
+<td>78</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>91</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestTableDescriptorBuilder.java"></a>
+<td>86</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2FTestTableDescriptorBuilder.java"></a>
<h3>org/apache/hadoop/hbase/client/TestTableDescriptorBuilder.java</h3>
<table class="table table-striped">
<tr class="a">
@@ -6221,85 +6123,73 @@
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>64</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" /> Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>72</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" /> Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>80</td></tr>
+<td>76</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>javadoc</td>
<td>NonEmptyAtclauseDescription</td>
<td>At-clause should have a non-empty description.</td>
-<td>88</td></tr>
+<td>84</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>105</td></tr>
+<td>101</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>252</td></tr>
+<td>246</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>315</td></tr>
+<td>309</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>316</td></tr>
+<td>310</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>333</td></tr>
+<td>327</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>334</td></tr>
+<td>328</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>348</td></tr>
+<td>342</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>349</td></tr>
+<td>343</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>366</td></tr>
+<td>360</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>misc</td>
<td>ArrayTypeStyle</td>
<td>Array brackets at illegal position.</td>
-<td>367</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2Fcoprocessor.2FAggregationClient.java"></a>
+<td>361</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fclient.2Fcoprocessor.2FAggregationClient.java"></a>
<h3>org/apache/hadoop/hbase/client/coprocessor/AggregationClient.java</h3>
<table class="table table-striped">
<tr class="a">
@@ -7127,55 +7017,55 @@
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 107).</td>
-<td>89</td></tr>
+<td>98</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 198).</td>
-<td>99</td></tr>
+<td>108</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 198).</td>
-<td>100</td></tr>
+<td>109</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 198).</td>
-<td>101</td></tr>
+<td>110</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 198).</td>
-<td>102</td></tr>
+<td>111</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 198).</td>
-<td>103</td></tr>
+<td>112</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 198).</td>
-<td>104</td></tr>
+<td>113</td></tr>
<tr class="a">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 198).</td>
-<td>105</td></tr>
+<td>114</td></tr>
<tr class="b">
<td><img src="images/icon_error_sml.gif" /> Error</td>
<td>sizes</td>
<td>LineLength</td>
<td>Line is longer than 100 characters (found 198).</td>
-<td>106</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Ffilter.2FFilterListWithOR.java"></a>
+<td>115</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Ffilter.2FFilterListWithOR.java"></a>
<h3>org/apache/hadoop/hbase/filter/FilterListWithOR.java</h3>
<table class="table table-striped">
<tr class="a">
@@ -7405,7 +7295,7 @@
<td>blocks</td>
<td>NeedBraces</td>
<td>'if' construct must use '{}'s.</td>
-<td>180</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Ffilter.2FPageFilter.java"></a>
+<td>203</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Ffilter.2FPageFilter.java"></a>
<h3>org/apache/hadoop/hbase/filter/PageFilter.java</h3>
<table class="table table-striped">
<tr class="a">
diff --git a/code-of-conduct/index.html b/code-of-conduct/index.html
index 432de2958ed..9ecb689cc61 100644
--- a/code-of-conduct/index.html
+++ b/code-of-conduct/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/images/logo.svg"/><title>Code of Conduct - Apache HBase</title><meta name="description" content="Code of Conduct and Diversity Statement for the Apache HBase project community."/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/images/logo.svg"/><title>Code of Conduct - Apache HBase</title><meta name="description" content="Code of Conduct and Diversity Statement for the Apache HBase project community."/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -42,7 +42,7 @@
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/landing-layout-By78yIYe.js";
import * as route2 from "/assets/code-of-conduct-BvBGYarj.js";
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 757e3f20e3e..4f596d1718e 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-05-14
+ | 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-05-16
| 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 791b85600a8..8fe6ef33828 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-05-14
+ | 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-05-16
| 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 a9de894f468..ea59edf6a90 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-05-14
+ | 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-05-16
| Rendered using Apache Maven Fluido Skin 2.0.0-M9
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index 3a0da1d8672..c7459d366cc 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -51650,12 +51650,26 @@ loadScripts(document, 'script');</script>
<div class="block">Filters that cannot provide a seek hint after row-key rejection can inherit this no-op
implementation.</div>
</dd>
+<dt><a href="org/apache/hadoop/hbase/filter/FilterList.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)" class="member-name-link">getHintForRejectedRow(Cell)</a> - Method in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/FilterList.html" title="class in org.apache.hadoop.hbase.filter">FilterList</a></dt>
+<dd> </dd>
+<dt><a href="org/apache/hadoop/hbase/filter/FilterListWithAND.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)" class="member-name-link">getHintForRejectedRow(Cell)</a> - Method in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/FilterListWithAND.html" title="class in org.apache.hadoop.hbase.filter">FilterListWithAND</a></dt>
+<dd>
+<div class="block">Maximal step: return the farthest hint among sub-filters that actually rejected the row.</div>
+</dd>
+<dt><a href="org/apache/hadoop/hbase/filter/FilterListWithOR.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)" class="member-name-link">getHintForRejectedRow(Cell)</a> - Method in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/FilterListWithOR.html" title="class in org.apache.hadoop.hbase.filter">FilterListWithOR</a></dt>
+<dd>
+<div class="block">Minimal step: return the nearest hint.</div>
+</dd>
<dt><a href="org/apache/hadoop/hbase/filter/FilterWrapper.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)" class="member-name-link">getHintForRejectedRow(Cell)</a> - Method in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/FilterWrapper.html" title="class in org.apache.hadoop.hbase.filter">FilterWrapper</a></dt>
<dd>
<div class="block">Delegates to the wrapped filter's <a href="org/apache/hadoop/hbase/filter/Filter.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)"><code>Filter.getHintForRejectedRow(Cell)</code></a> so that the scan
pipeline can seek directly past a rejected row rather than iterating cell-by-cell via
<code>nextRow()</code>.</div>
</dd>
+<dt><a href="org/apache/hadoop/hbase/filter/SkipFilter.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)" class="member-name-link">getHintForRejectedRow(Cell)</a> - Method in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/SkipFilter.html" title="class in org.apache.hadoop.hbase.filter">SkipFilter</a></dt>
+<dd> </dd>
+<dt><a href="org/apache/hadoop/hbase/filter/WhileMatchFilter.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)" class="member-name-link">getHintForRejectedRow(Cell)</a> - Method in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/WhileMatchFilter.html" title="class in org.apache.hadoop.hbase.filter">WhileMatchFilter</a></dt>
+<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/regionserver/RegionScannerImpl.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)" class="member-name-link">getHintForRejectedRow(Cell)</a> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/RegionScannerImpl.html" title="class in org.apache.hadoop.hbase.regionserver">RegionScannerImpl</a></dt>
<dd>
<div class="block">Asks the current <a href="org/apache/hadoop/hbase/filter/FilterWrapper.html" title="class in org.apache.hadoop.hbase.filter"><code>FilterWrapper</code></a> for a seek hint to use
@@ -64275,6 +64289,10 @@ loadScripts(document, 'script');</script>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/mapreduce/TsvImporterTextMapper.html#getSkipBadLines()" class="member-name-link">getSkipBadLines()</a> - Method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/TsvImporterTextMapper.html" title="class in org.apache.hadoop.hbase.mapreduce">TsvImporterTextMapper</a></dt>
<dd> </dd>
+<dt><a href="org/apache/hadoop/hbase/filter/ColumnPrefixFilter.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint(Cell)</a> - Method in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/ColumnPrefixFilter.html" title="class in org.apache.hadoop.hbase.filter">ColumnPrefixFilter</a></dt>
+<dd> </dd>
+<dt><a href="org/apache/hadoop/hbase/filter/ColumnRangeFilter.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint(Cell)</a> - Method in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/ColumnRangeFilter.html" title="class in org.apache.hadoop.hbase.filter">ColumnRangeFilter</a></dt>
+<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/filter/Filter.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint(Cell)</a> - Method in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a></dt>
<dd>
<div class="block">Provides a seek hint for cells that are structurally skipped by the scan pipeline
@@ -64284,11 +64302,27 @@ loadScripts(document, 'script');</script>
<dd>
<div class="block">Filters that cannot provide a structural-skip seek hint can inherit this no-op implementation.</div>
</dd>
+<dt><a href="org/apache/hadoop/hbase/filter/FilterList.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint(Cell)</a> - Method in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/FilterList.html" title="class in org.apache.hadoop.hbase.filter">FilterList</a></dt>
+<dd> </dd>
+<dt><a href="org/apache/hadoop/hbase/filter/FilterListWithAND.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint(Cell)</a> - Method in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/FilterListWithAND.html" title="class in org.apache.hadoop.hbase.filter">FilterListWithAND</a></dt>
+<dd>
+<div class="block">Maximal step: return the farthest skip hint among sub-filters.</div>
+</dd>
+<dt><a href="org/apache/hadoop/hbase/filter/FilterListWithOR.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint(Cell)</a> - Method in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/FilterListWithOR.html" title="class in org.apache.hadoop.hbase.filter">FilterListWithOR</a></dt>
+<dd>
+<div class="block">Minimal step: return the nearest skip hint.</div>
+</dd>
<dt><a href="org/apache/hadoop/hbase/filter/FilterWrapper.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint(Cell)</a> - Method in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/FilterWrapper.html" title="class in org.apache.hadoop.hbase.filter">FilterWrapper</a></dt>
<dd>
<div class="block">Delegates to the wrapped filter's <a href="org/apache/hadoop/hbase/filter/Filter.html#getSkipHint(org.apache.hadoop.hbase.Cell)"><code>Filter.getSkipHint(Cell)</code></a> so that the scan pipeline
can seek ahead when a cell is structurally skipped before <code>filterCell</code> is reached.</div>
</dd>
+<dt><a href="org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint(Cell)</a> - Method in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.html" title="class in org.apache.hadoop.hbase.filter">MultipleColumnPrefixFilter</a></dt>
+<dd> </dd>
+<dt><a href="org/apache/hadoop/hbase/filter/SkipFilter.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint(Cell)</a> - Method in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/SkipFilter.html" title="class in org.apache.hadoop.hbase.filter">SkipFilter</a></dt>
+<dd> </dd>
+<dt><a href="org/apache/hadoop/hbase/filter/WhileMatchFilter.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint(Cell)</a> - Method in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/WhileMatchFilter.html" title="class in org.apache.hadoop.hbase.filter">WhileMatchFilter</a></dt>
+<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/master/normalizer/RegionNormalizerManager.html#getSkippedCount(org.apache.hadoop.hbase.master.normalizer.NormalizationPlan.PlanType)" class="member-name-link">getSkippedCount(NormalizationPlan.PlanType)</a> - Method in class org.apache.hadoop.hbase.master.normalizer.<a href="org/apache/hadoop/hbase/master/normalizer/RegionNormalizerManager.html" title="class in org.apache.hadoop.hbase.master.normalizer">RegionNormalizerManager</a></dt>
<dd>
<div class="block">Retrieve a count of the number of times plans of type <code>type</code> were submitted but skipped.</div>
@@ -118169,6 +118203,10 @@ service.</div>
<dd>
<div class="block">Configured value of HConstants.REJECT_DECOMMISSIONED_HOSTS_KEY</div>
</dd>
+<dt><a href="org/apache/hadoop/hbase/filter/FilterListWithAND.html#rejectedByFilterRowKey" class="member-name-link">rejectedByFilterRowKey</a> - Variable in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/FilterListWithAND.html" title="class in org.apache.hadoop.hbase.filter">FilterListWithAND</a></dt>
+<dd>
+<div class="block">Tracks which sub-filters returned <code>true</code> from <a href="org/apache/hadoop/hbase/filter/Filter.html#filterRowKey(org.apache.hadoop.hbase.Cell)"><code>Filter.filterRowKey(Cell)</code></a>.</div>
+</dd>
<dt><a href="org/apache/hadoop/hbase/regionserver/RSRpcServices.html#rejectIfInStandByState(org.apache.hadoop.hbase.regionserver.HRegion)" class="member-name-link">rejectIfInStandByState(HRegion)</a> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a></dt>
<dd> </dd>
<dt><a href="org/apache/hadoop/hbase/replication/regionserver/RejectReplicationRequestStateChecker.html" class="type-name-link" title="class in org.apache.hadoop.hbase.replication.regionserver">RejectReplicationRequestStateChecker</a> - Class in <a href="org/apache/hadoop/hbase/replication/regionserver/package-summary.html">org.apache.hadoop.hbase.replication.regionserver</a></dt>
diff --git a/devapidocs/member-search-index.js b/devapidocs/member-search-index.js
index 2b7a23db423..66a5064acf6 100644
--- a/devapidocs/member-search-index.js
+++ b/devapidocs/member-search-index.js
@@ -1 +1 @@
-memberSearchIndex = [{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getBlockcache()"},{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getBlocksize()"},{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getBloomfilter()"},{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getCompression()"},{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getInMemory()"},{"p":"org.apache. [...]
\ No newline at end of file
+memberSearchIndex = [{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getBlockcache()"},{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getBlocksize()"},{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getBloomfilter()"},{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getCompression()"},{"p":"org.apache.hadoop.hbase.rest.model","c":"ColumnSchemaModel","l":"__getInMemory()"},{"p":"org.apache. [...]
\ No newline at end of file
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html b/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html
index 18ef70b34ba..5c97001259d 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/Cell.html
@@ -1755,72 +1755,110 @@ service.</div>
implementation.</div>
</div>
<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">FilterWrapper.</span><code><a href="../filter/FilterWrapper.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)" class="member-name-link">getHintForRejectedRow</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstRowCell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterList.</span><code><a href="../filter/FilterList.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)" class="member-name-link">getHintForRejectedRow</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstRowCell)</code></div>
+<div class="col-last odd-row-color"> </div>
+<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterListWithAND.</span><code><a href="../filter/FilterListWithAND.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)" class="member-name-link">getHintForRejectedRow</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstRowCell)</code></div>
+<div class="col-last even-row-color">
+<div class="block">Maximal step: return the farthest hint among sub-filters that actually rejected the row.</div>
+</div>
+<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterListWithOR.</span><code><a href="../filter/FilterListWithOR.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)" class="member-name-link">getHintForRejectedRow</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstRowCell)</code></div>
<div class="col-last odd-row-color">
+<div class="block">Minimal step: return the nearest hint.</div>
+</div>
+<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterWrapper.</span><code><a href="../filter/FilterWrapper.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)" class="member-name-link">getHintForRejectedRow</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstRowCell)</code></div>
+<div class="col-last even-row-color">
<div class="block">Delegates to the wrapped filter's <a href="../filter/Filter.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)"><code>Filter.getHintForRejectedRow(Cell)</code></a> so that the scan
pipeline can seek directly past a rejected row rather than iterating cell-by-cell via
<code>nextRow()</code>.</div>
</div>
+<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">SkipFilter.</span><code><a href="../filter/SkipFilter.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)" class="member-name-link">getHintForRejectedRow</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstRowCell)</code></div>
+<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">ColumnPaginationFilter.</span><code><a href="../filter/ColumnPaginationFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">WhileMatchFilter.</span><code><a href="../filter/WhileMatchFilter.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)" class="member-name-link">getHintForRejectedRow</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstRowCell)</code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">ColumnPrefixFilter.</span><code><a href="../filter/ColumnPrefixFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">ColumnPaginationFilter.</span><code><a href="../filter/ColumnPaginationFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)</code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">ColumnRangeFilter.</span><code><a href="../filter/ColumnRangeFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">ColumnPrefixFilter.</span><code><a href="../filter/ColumnPrefixFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)</code></div>
<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>abstract <a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">Filter.</span><code><a href="../filter/Filter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
-<div class="col-last odd-row-color">
+<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">ColumnRangeFilter.</span><code><a href="../filter/ColumnRangeFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)</code></div>
+<div class="col-last odd-row-color"> </div>
+<div class="col-first even-row-color"><code>abstract <a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">Filter.</span><code><a href="../filter/Filter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
+<div class="col-last even-row-color">
<div class="block">If the filter returns the match code SEEK_NEXT_USING_HINT, then it should also tell which is
the next key it must seek to.</div>
</div>
-<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">FilterBase.</span><code><a href="../filter/FilterBase.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
-<div class="col-last even-row-color">
+<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterBase.</span><code><a href="../filter/FilterBase.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
+<div class="col-last odd-row-color">
<div class="block">Filters that are not sure which key must be next seeked to, can inherit this implementation
that, by default, returns a null Cell.</div>
</div>
+<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterList.</span><code><a href="../filter/FilterList.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
+<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">FilterList.</span><code><a href="../filter/FilterList.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterListWithAND.</span><code><a href="../filter/FilterListWithAND.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">FilterListWithAND.</span><code><a href="../filter/FilterListWithAND.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterListWithOR.</span><code><a href="../filter/FilterListWithOR.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">FilterListWithOR.</span><code><a href="../filter/FilterListWithOR.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterWrapper.</span><code><a href="../filter/FilterWrapper.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">FilterWrapper.</span><code><a href="../filter/FilterWrapper.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FuzzyRowFilter.</span><code><a href="../filter/FuzzyRowFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">FuzzyRowFilter.</span><code><a href="../filter/FuzzyRowFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">MultipleColumnPrefixFilter.</span><code><a href="../filter/MultipleColumnPrefixFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)</code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">MultipleColumnPrefixFilter.</span><code><a href="../filter/MultipleColumnPrefixFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">MultiRowRangeFilter.</span><code><a href="../filter/MultiRowRangeFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentKV)</code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">MultiRowRangeFilter.</span><code><a href="../filter/MultiRowRangeFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentKV)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">PrefixFilter.</span><code><a href="../filter/PrefixFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)</code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">PrefixFilter.</span><code><a href="../filter/PrefixFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">TimestampsFilter.</span><code><a href="../filter/TimestampsFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
+<div class="col-last even-row-color">
+<div class="block">Pick the next cell that the scanner should seek to.</div>
+</div>
+<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">ColumnPrefixFilter.</span><code><a href="../filter/ColumnPrefixFilter.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
+<div class="col-last odd-row-color"> </div>
+<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">ColumnRangeFilter.</span><code><a href="../filter/ColumnRangeFilter.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">TimestampsFilter.</span><code><a href="../filter/TimestampsFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">Filter.</span><code><a href="../filter/Filter.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
<div class="col-last odd-row-color">
-<div class="block">Pick the next cell that the scanner should seek to.</div>
+<div class="block">Provides a seek hint for cells that are structurally skipped by the scan pipeline
+ <em>before</em> <a href="../filter/Filter.html#filterCell(org.apache.hadoop.hbase.Cell)"><code>Filter.filterCell(Cell)</code></a> is ever reached.</div>
</div>
<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">Filter.</span><code><a href="../filter/Filter.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterBase.</span><code><a href="../filter/FilterBase.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
<div class="col-last even-row-color">
-<div class="block">Provides a seek hint for cells that are structurally skipped by the scan pipeline
- <em>before</em> <a href="../filter/Filter.html#filterCell(org.apache.hadoop.hbase.Cell)"><code>Filter.filterCell(Cell)</code></a> is ever reached.</div>
+<div class="block">Filters that cannot provide a structural-skip seek hint can inherit this no-op implementation.</div>
</div>
<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">FilterBase.</span><code><a href="../filter/FilterBase.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterList.</span><code><a href="../filter/FilterList.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
+<div class="col-last odd-row-color"> </div>
+<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterListWithAND.</span><code><a href="../filter/FilterListWithAND.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
+<div class="col-last even-row-color">
+<div class="block">Maximal step: return the farthest skip hint among sub-filters.</div>
+</div>
+<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterListWithOR.</span><code><a href="../filter/FilterListWithOR.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
<div class="col-last odd-row-color">
-<div class="block">Filters that cannot provide a structural-skip seek hint can inherit this no-op implementation.</div>
+<div class="block">Minimal step: return the nearest skip hint.</div>
</div>
<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
<div class="col-second even-row-color"><span class="type-name-label">FilterWrapper.</span><code><a href="../filter/FilterWrapper.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
@@ -1828,36 +1866,45 @@ service.</div>
<div class="block">Delegates to the wrapped filter's <a href="../filter/Filter.html#getSkipHint(org.apache.hadoop.hbase.Cell)"><code>Filter.getSkipHint(Cell)</code></a> so that the scan pipeline
can seek ahead when a cell is structurally skipped before <code>filterCell</code> is reached.</div>
</div>
-<div class="col-first odd-row-color"><code>abstract <a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">Filter.</span><code><a href="../filter/Filter.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> v)</code></div>
-<div class="col-last odd-row-color">
-<div class="block">Give the filter a chance to transform the passed Cell.</div>
-</div>
+<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">MultipleColumnPrefixFilter.</span><code><a href="../filter/MultipleColumnPrefixFilter.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
+<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">FilterBase.</span><code><a href="../filter/FilterBase.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> v)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">SkipFilter.</span><code><a href="../filter/SkipFilter.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
+<div class="col-last even-row-color"> </div>
+<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">WhileMatchFilter.</span><code><a href="../filter/WhileMatchFilter.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
+<div class="col-last odd-row-color"> </div>
+<div class="col-first even-row-color"><code>abstract <a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">Filter.</span><code><a href="../filter/Filter.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> v)</code></div>
<div class="col-last even-row-color">
-<div class="block">By default no transformation takes place Give the filter a chance to transform the passed Cell.</div>
+<div class="block">Give the filter a chance to transform the passed Cell.</div>
</div>
<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">FilterList.</span><code><a href="../filter/FilterList.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> c)</code></div>
-<div class="col-last odd-row-color"> </div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterBase.</span><code><a href="../filter/FilterBase.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> v)</code></div>
+<div class="col-last odd-row-color">
+<div class="block">By default no transformation takes place Give the filter a chance to transform the passed Cell.</div>
+</div>
<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">FilterListBase.</span><code><a href="../filter/FilterListBase.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> c)</code></div>
-<div class="col-last even-row-color">
+<div class="col-second even-row-color"><span class="type-name-label">FilterList.</span><code><a href="../filter/FilterList.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> c)</code></div>
+<div class="col-last even-row-color"> </div>
+<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterListBase.</span><code><a href="../filter/FilterListBase.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> c)</code></div>
+<div class="col-last odd-row-color">
<div class="block">For FilterList, we can consider a filter list as a node in a tree.</div>
</div>
-<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">FilterWrapper.</span><code><a href="../filter/FilterWrapper.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> v)</code></div>
-<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">KeyOnlyFilter.</span><code><a href="../filter/KeyOnlyFilter.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterWrapper.</span><code><a href="../filter/FilterWrapper.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> v)</code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">SkipFilter.</span><code><a href="../filter/SkipFilter.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> v)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">KeyOnlyFilter.</span><code><a href="../filter/KeyOnlyFilter.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)</code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">WhileMatchFilter.</span><code><a href="../filter/WhileMatchFilter.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> v)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">SkipFilter.</span><code><a href="../filter/SkipFilter.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> v)</code></div>
<div class="col-last even-row-color"> </div>
+<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">WhileMatchFilter.</span><code><a href="../filter/WhileMatchFilter.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> v)</code></div>
+<div class="col-last odd-row-color"> </div>
</div>
<div class="caption"><span>Methods in <a href="../filter/package-summary.html">org.apache.hadoop.hbase.filter</a> with parameters of type <a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span></div>
<div class="summary-table three-column-summary">
@@ -2101,72 +2148,110 @@ service.</div>
implementation.</div>
</div>
<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">FilterWrapper.</span><code><a href="../filter/FilterWrapper.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)" class="member-name-link">getHintForRejectedRow</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstRowCell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterList.</span><code><a href="../filter/FilterList.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)" class="member-name-link">getHintForRejectedRow</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstRowCell)</code></div>
+<div class="col-last even-row-color"> </div>
+<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterListWithAND.</span><code><a href="../filter/FilterListWithAND.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)" class="member-name-link">getHintForRejectedRow</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstRowCell)</code></div>
+<div class="col-last odd-row-color">
+<div class="block">Maximal step: return the farthest hint among sub-filters that actually rejected the row.</div>
+</div>
+<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterListWithOR.</span><code><a href="../filter/FilterListWithOR.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)" class="member-name-link">getHintForRejectedRow</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstRowCell)</code></div>
<div class="col-last even-row-color">
+<div class="block">Minimal step: return the nearest hint.</div>
+</div>
+<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterWrapper.</span><code><a href="../filter/FilterWrapper.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)" class="member-name-link">getHintForRejectedRow</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstRowCell)</code></div>
+<div class="col-last odd-row-color">
<div class="block">Delegates to the wrapped filter's <a href="../filter/Filter.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)"><code>Filter.getHintForRejectedRow(Cell)</code></a> so that the scan
pipeline can seek directly past a rejected row rather than iterating cell-by-cell via
<code>nextRow()</code>.</div>
</div>
+<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">SkipFilter.</span><code><a href="../filter/SkipFilter.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)" class="member-name-link">getHintForRejectedRow</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstRowCell)</code></div>
+<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">ColumnPaginationFilter.</span><code><a href="../filter/ColumnPaginationFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">WhileMatchFilter.</span><code><a href="../filter/WhileMatchFilter.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)" class="member-name-link">getHintForRejectedRow</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstRowCell)</code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">ColumnPrefixFilter.</span><code><a href="../filter/ColumnPrefixFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">ColumnPaginationFilter.</span><code><a href="../filter/ColumnPaginationFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)</code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">ColumnRangeFilter.</span><code><a href="../filter/ColumnRangeFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">ColumnPrefixFilter.</span><code><a href="../filter/ColumnPrefixFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)</code></div>
<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>abstract <a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">Filter.</span><code><a href="../filter/Filter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
-<div class="col-last even-row-color">
+<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">ColumnRangeFilter.</span><code><a href="../filter/ColumnRangeFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)</code></div>
+<div class="col-last even-row-color"> </div>
+<div class="col-first odd-row-color"><code>abstract <a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">Filter.</span><code><a href="../filter/Filter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
+<div class="col-last odd-row-color">
<div class="block">If the filter returns the match code SEEK_NEXT_USING_HINT, then it should also tell which is
the next key it must seek to.</div>
</div>
-<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">FilterBase.</span><code><a href="../filter/FilterBase.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
-<div class="col-last odd-row-color">
+<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterBase.</span><code><a href="../filter/FilterBase.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
+<div class="col-last even-row-color">
<div class="block">Filters that are not sure which key must be next seeked to, can inherit this implementation
that, by default, returns a null Cell.</div>
</div>
+<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterList.</span><code><a href="../filter/FilterList.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
+<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">FilterList.</span><code><a href="../filter/FilterList.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterListWithAND.</span><code><a href="../filter/FilterListWithAND.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">FilterListWithAND.</span><code><a href="../filter/FilterListWithAND.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterListWithOR.</span><code><a href="../filter/FilterListWithOR.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">FilterListWithOR.</span><code><a href="../filter/FilterListWithOR.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterWrapper.</span><code><a href="../filter/FilterWrapper.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">FilterWrapper.</span><code><a href="../filter/FilterWrapper.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FuzzyRowFilter.</span><code><a href="../filter/FuzzyRowFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">FuzzyRowFilter.</span><code><a href="../filter/FuzzyRowFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">MultipleColumnPrefixFilter.</span><code><a href="../filter/MultipleColumnPrefixFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)</code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">MultipleColumnPrefixFilter.</span><code><a href="../filter/MultipleColumnPrefixFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">MultiRowRangeFilter.</span><code><a href="../filter/MultiRowRangeFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentKV)</code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">MultiRowRangeFilter.</span><code><a href="../filter/MultiRowRangeFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentKV)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">PrefixFilter.</span><code><a href="../filter/PrefixFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)</code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">PrefixFilter.</span><code><a href="../filter/PrefixFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">TimestampsFilter.</span><code><a href="../filter/TimestampsFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
+<div class="col-last odd-row-color">
+<div class="block">Pick the next cell that the scanner should seek to.</div>
+</div>
+<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">ColumnPrefixFilter.</span><code><a href="../filter/ColumnPrefixFilter.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
+<div class="col-last even-row-color"> </div>
+<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">ColumnRangeFilter.</span><code><a href="../filter/ColumnRangeFilter.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">TimestampsFilter.</span><code><a href="../filter/TimestampsFilter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">Filter.</span><code><a href="../filter/Filter.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
<div class="col-last even-row-color">
-<div class="block">Pick the next cell that the scanner should seek to.</div>
+<div class="block">Provides a seek hint for cells that are structurally skipped by the scan pipeline
+ <em>before</em> <a href="../filter/Filter.html#filterCell(org.apache.hadoop.hbase.Cell)"><code>Filter.filterCell(Cell)</code></a> is ever reached.</div>
</div>
<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">Filter.</span><code><a href="../filter/Filter.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterBase.</span><code><a href="../filter/FilterBase.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
<div class="col-last odd-row-color">
-<div class="block">Provides a seek hint for cells that are structurally skipped by the scan pipeline
- <em>before</em> <a href="../filter/Filter.html#filterCell(org.apache.hadoop.hbase.Cell)"><code>Filter.filterCell(Cell)</code></a> is ever reached.</div>
+<div class="block">Filters that cannot provide a structural-skip seek hint can inherit this no-op implementation.</div>
</div>
<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">FilterBase.</span><code><a href="../filter/FilterBase.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterList.</span><code><a href="../filter/FilterList.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
+<div class="col-last even-row-color"> </div>
+<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterListWithAND.</span><code><a href="../filter/FilterListWithAND.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
+<div class="col-last odd-row-color">
+<div class="block">Maximal step: return the farthest skip hint among sub-filters.</div>
+</div>
+<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterListWithOR.</span><code><a href="../filter/FilterListWithOR.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
<div class="col-last even-row-color">
-<div class="block">Filters that cannot provide a structural-skip seek hint can inherit this no-op implementation.</div>
+<div class="block">Minimal step: return the nearest skip hint.</div>
</div>
<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
<div class="col-second odd-row-color"><span class="type-name-label">FilterWrapper.</span><code><a href="../filter/FilterWrapper.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
@@ -2174,52 +2259,61 @@ service.</div>
<div class="block">Delegates to the wrapped filter's <a href="../filter/Filter.html#getSkipHint(org.apache.hadoop.hbase.Cell)"><code>Filter.getSkipHint(Cell)</code></a> so that the scan pipeline
can seek ahead when a cell is structurally skipped before <code>filterCell</code> is reached.</div>
</div>
-<div class="col-first even-row-color"><code>(package private) boolean</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">FuzzyRowFilter.RowTracker.</span><code><a href="../filter/FuzzyRowFilter.RowTracker.html#lessThan(org.apache.hadoop.hbase.Cell,byte%5B%5D)" class="member-name-link">lessThan</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell,
- byte[] nextRowKey)</code></div>
+<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">MultipleColumnPrefixFilter.</span><code><a href="../filter/MultipleColumnPrefixFilter.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>abstract <a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">Filter.</span><code><a href="../filter/Filter.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> v)</code></div>
-<div class="col-last odd-row-color">
-<div class="block">Give the filter a chance to transform the passed Cell.</div>
-</div>
+<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">SkipFilter.</span><code><a href="../filter/SkipFilter.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
+<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">FilterBase.</span><code><a href="../filter/FilterBase.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> v)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">WhileMatchFilter.</span><code><a href="../filter/WhileMatchFilter.html#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
+<div class="col-last even-row-color"> </div>
+<div class="col-first odd-row-color"><code>(package private) boolean</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FuzzyRowFilter.RowTracker.</span><code><a href="../filter/FuzzyRowFilter.RowTracker.html#lessThan(org.apache.hadoop.hbase.Cell,byte%5B%5D)" class="member-name-link">lessThan</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell,
+ byte[] nextRowKey)</code></div>
+<div class="col-last odd-row-color"> </div>
+<div class="col-first even-row-color"><code>abstract <a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second even-row-color"><span class="type-name-label">Filter.</span><code><a href="../filter/Filter.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> v)</code></div>
<div class="col-last even-row-color">
-<div class="block">By default no transformation takes place Give the filter a chance to transform the passed Cell.</div>
+<div class="block">Give the filter a chance to transform the passed Cell.</div>
</div>
<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">FilterList.</span><code><a href="../filter/FilterList.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> c)</code></div>
-<div class="col-last odd-row-color"> </div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterBase.</span><code><a href="../filter/FilterBase.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> v)</code></div>
+<div class="col-last odd-row-color">
+<div class="block">By default no transformation takes place Give the filter a chance to transform the passed Cell.</div>
+</div>
<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">FilterListBase.</span><code><a href="../filter/FilterListBase.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> c)</code></div>
-<div class="col-last even-row-color">
+<div class="col-second even-row-color"><span class="type-name-label">FilterList.</span><code><a href="../filter/FilterList.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> c)</code></div>
+<div class="col-last even-row-color"> </div>
+<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FilterListBase.</span><code><a href="../filter/FilterListBase.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> c)</code></div>
+<div class="col-last odd-row-color">
<div class="block">For FilterList, we can consider a filter list as a node in a tree.</div>
</div>
-<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">FilterWrapper.</span><code><a href="../filter/FilterWrapper.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> v)</code></div>
-<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">KeyOnlyFilter.</span><code><a href="../filter/KeyOnlyFilter.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterWrapper.</span><code><a href="../filter/FilterWrapper.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> v)</code></div>
<div class="col-last even-row-color"> </div>
<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">SkipFilter.</span><code><a href="../filter/SkipFilter.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> v)</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">KeyOnlyFilter.</span><code><a href="../filter/KeyOnlyFilter.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> cell)</code></div>
<div class="col-last odd-row-color"> </div>
<div class="col-first even-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second even-row-color"><span class="type-name-label">WhileMatchFilter.</span><code><a href="../filter/WhileMatchFilter.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> v)</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">SkipFilter.</span><code><a href="../filter/SkipFilter.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> v)</code></div>
<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>private void</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">FilterListWithOR.</span><code><a href="../filter/FilterListWithOR.html#updatePrevCellList(int,org.apache.hadoop.hbase.Cell,org.apache.hadoop.hbase.filter.Filter.ReturnCode)" class="member-name-link">updatePrevCellList</a><wbr>(int index,
+<div class="col-first odd-row-color"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">WhileMatchFilter.</span><code><a href="../filter/WhileMatchFilter.html#transformCell(org.apache.hadoop.hbase.Cell)" class="member-name-link">transformCell</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> v)</code></div>
+<div class="col-last odd-row-color"> </div>
+<div class="col-first even-row-color"><code>private void</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FilterListWithOR.</span><code><a href="../filter/FilterListWithOR.html#updatePrevCellList(int,org.apache.hadoop.hbase.Cell,org.apache.hadoop.hbase.filter.Filter.ReturnCode)" class="member-name-link">updatePrevCellList</a><wbr>(int index,
<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell,
<a href="../filter/Filter.ReturnCode.html" title="enum class in org.apache.hadoop.hbase.filter">Filter.ReturnCode</a> currentRC)</code></div>
-<div class="col-last odd-row-color"> </div>
-<div class="col-first even-row-color"><code>(package private) boolean</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">FuzzyRowFilter.RowTracker.</span><code><a href="../filter/FuzzyRowFilter.RowTracker.html#updateTracker(org.apache.hadoop.hbase.Cell)" class="member-name-link">updateTracker</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>(package private) void</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">FuzzyRowFilter.RowTracker.</span><code><a href="../filter/FuzzyRowFilter.RowTracker.html#updateWith(org.apache.hadoop.hbase.Cell,org.apache.hadoop.hbase.util.Pair)" class="member-name-link">updateWith</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell,
- <a href="../util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a><byte[],<wbr>byte[]> fuzzyData)</code></div>
+<div class="col-first odd-row-color"><code>(package private) boolean</code></div>
+<div class="col-second odd-row-color"><span class="type-name-label">FuzzyRowFilter.RowTracker.</span><code><a href="../filter/FuzzyRowFilter.RowTracker.html#updateTracker(org.apache.hadoop.hbase.Cell)" class="member-name-link">updateTracker</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
<div class="col-last odd-row-color"> </div>
+<div class="col-first even-row-color"><code>(package private) void</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">FuzzyRowFilter.RowTracker.</span><code><a href="../filter/FuzzyRowFilter.RowTracker.html#updateWith(org.apache.hadoop.hbase.Cell,org.apache.hadoop.hbase.util.Pair)" class="member-name-link">updateWith</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell,
+ <a href="../util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a><byte[],<wbr>byte[]> fuzzyData)</code></div>
+<div class="col-last even-row-color"> </div>
</div>
<div class="caption"><span>Method parameters in <a href="../filter/package-summary.html">org.apache.hadoop.hbase.filter</a> with type arguments of type <a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span></div>
<div class="summary-table three-column-summary">
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/ColumnPrefixFilter.html b/devapidocs/org/apache/hadoop/hbase/filter/ColumnPrefixFilter.html
index 2472c022ead..de4a27f0cd3 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/ColumnPrefixFilter.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/ColumnPrefixFilter.html
@@ -185,22 +185,27 @@ implements <a href="HintingFilter.html" title="interface in org.apache.hadoop.hb
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>byte[]</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getPrefix()" class="member-name-link">getPrefix</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
-<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>int</code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#hashCode()" class="member-name-link">hashCode</a>()</code></div>
-<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
-<div class="col-first even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static <a href="ColumnPrefixFilter.html" title="class in org.apache.hadoop.hbase.filter">ColumnPrefixFilter</a></code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#parseFrom(byte%5B%5D)" class="member-name-link">parseFrom</a><wbr>(byte[] pbBytes)</code></div>
-<div class="col-last even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Filters that cannot provide a structural-skip seek hint can inherit this no-op implementation.</div>
+</div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>int</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#hashCode()" class="member-name-link">hashCode</a>()</code></div>
+<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static <a href="ColumnPrefixFilter.html" title="class in org.apache.hadoop.hbase.filter">ColumnPrefixFilter</a></code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#parseFrom(byte%5B%5D)" class="member-name-link">parseFrom</a><wbr>(byte[] pbBytes)</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">
<div class="block">Parses a serialized representation of the <a href="ColumnPrefixFilter.html" title="class in org.apache.hadoop.hbase.filter"><code>ColumnPrefixFilter</code></a></div>
</div>
-<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>byte[]</code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toByteArray()" class="member-name-link">toByteArray</a>()</code></div>
-<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>byte[]</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toByteArray()" class="member-name-link">toByteArray</a>()</code></div>
+<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns The filter serialized using pb</div>
</div>
-<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toString()" class="member-name-link">toString</a>()</code></div>
-<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toString()" class="member-name-link">toString</a>()</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Return filter's info for debugging and logging purpose.</div>
</div>
</div>
@@ -208,7 +213,7 @@ implements <a href="HintingFilter.html" title="interface in org.apache.hadoop.hb
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-org.apache.hadoop.hbase.filter.FilterBase">Methods inherited from class org.apache.hadoop.hbase.filter.<a href="FilterBase.html" title="class in org.apache.hadoop.hbase.filter">FilterBase</a></h3>
-<code><a href="FilterBase.html#filterAllRemaining()">filterAllRemaining</a>, <a href="FilterBase.html#filterRow()">filterRow</a>, <a href="FilterBase.html#filterRowCells(java.util.List)">filterRowCells</a>, <a href="FilterBase.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)">getHintForRejectedRow</a>, <a href="FilterBase.html#getSkipHint(org.apache.hadoop.hbase.Cell)">getSkipHint</a>, <a href="FilterBase.html#hasFilterRow()">hasFilterRow</a>, <a href="FilterBase.html#isFamilyEss [...]
+<code><a href="FilterBase.html#filterAllRemaining()">filterAllRemaining</a>, <a href="FilterBase.html#filterRow()">filterRow</a>, <a href="FilterBase.html#filterRowCells(java.util.List)">filterRowCells</a>, <a href="FilterBase.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)">getHintForRejectedRow</a>, <a href="FilterBase.html#hasFilterRow()">hasFilterRow</a>, <a href="FilterBase.html#isFamilyEssential(byte%5B%5D)">isFamilyEssential</a>, <a href="FilterBase.html#reset()">reset</a [...]
<div class="inherited-list">
<h3 id="methods-inherited-from-class-org.apache.hadoop.hbase.filter.Filter">Methods inherited from class org.apache.hadoop.hbase.filter.<a href="Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a></h3>
<code><a href="Filter.html#isReversed()">isReversed</a>, <a href="Filter.html#setReversed(boolean)">setReversed</a></code></div>
@@ -404,9 +409,68 @@ implements <a href="HintingFilter.html" title="interface in org.apache.hadoop.hb
</section>
</li>
<li>
+<section class="detail" id="getSkipHint(org.apache.hadoop.hbase.Cell)">
+<h3>getSkipHint</h3>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/ColumnPrefixFilter.html#line-151">getSkipHint</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</span>
+ throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
+<div class="block"><span class="descfrm-type-label">Description copied from class: <code><a href="FilterBase.html#getSkipHint(org.apache.hadoop.hbase.Cell)">FilterBase</a></code></span></div>
+<div class="block">Filters that cannot provide a structural-skip seek hint can inherit this no-op implementation.
+ Subclasses with purely configuration-driven, stateless hint computation (e.g. a fixed column
+ range or fuzzy-row pattern) may override this to avoid cell-by-cell advancement when the
+ time-range, column, or version gate fires. Provides a seek hint for cells that are structurally skipped by the scan pipeline
+ <em>before</em> <a href="Filter.html#filterCell(org.apache.hadoop.hbase.Cell)"><code>Filter.filterCell(Cell)</code></a> is ever reached. The pipeline short-circuits on
+ several criteria — time-range mismatch, column-set exclusion, and version-limit exhaustion —
+ and in each case the filter is bypassed entirely. When an implementation can compute a
+ meaningful forward position purely from the cell's coordinates (without needing the
+ <code>filterCell</code> call sequence), it should return that position here so the scanner can seek
+ ahead instead of advancing one cell at a time.
+ <p>
+ Contract:
+ <ul>
+ <li>May be called for cells that have <strong>never</strong> been passed to
+ <a href="Filter.html#filterCell(org.apache.hadoop.hbase.Cell)"><code>Filter.filterCell(Cell)</code></a>.</li>
+ <li>Implementations <strong>must not</strong> modify any filter state; this method is treated
+ as logically stateless. Only filters whose hint computation is based solely on immutable
+ configuration (e.g. a fixed column range or a fuzzy-row pattern) should override this.</li>
+ <li>The returned <a href="../Cell.html" title="interface in org.apache.hadoop.hbase"><code>Cell</code></a>, if non-null, must be an
+ <a href="../ExtendedCell.html" title="interface in org.apache.hadoop.hbase"><code>ExtendedCell</code></a> because filters are evaluated on the server
+ side.</li>
+ <li>Returning <code>null</code> (the default) falls through to the existing structural skip/seek
+ behaviour, preserving full backward compatibility.</li>
+ <li>For reversed scans, the returned cell must have a <em>smaller</em> row key (i.e., earlier
+ in reverse-scan direction) than the <code>skippedCell</code>. Hints that do not advance in the scan
+ direction are silently ignored.</li>
+ <li><strong>Composite filter support:</strong> <code>FilterList</code> (both <code>MUST_PASS_ALL</code>
+ and <code>MUST_PASS_ONE</code>), <code>SkipFilter</code>, and <code>WhileMatchFilter</code> delegate this
+ method to their sub-filters and merge the results (maximal step for AND; for OR, the nearest
+ hint is returned only when every non-terminated sub-filter provides one — any null collapses
+ the OR result to null).</li>
+ </ul></div>
+<dl class="notes">
+<dt>Overrides:</dt>
+<dd><code><a href="FilterBase.html#getSkipHint(org.apache.hadoop.hbase.Cell)">getSkipHint</a></code> in class <code><a href="FilterBase.html" title="class in org.apache.hadoop.hbase.filter">FilterBase</a></code></dd>
+<dt>Parameters:</dt>
+<dd><code>skippedCell</code> - the cell that was rejected by the time-range, column, or version gate before
+ <code>filterCell</code> could be consulted</dd>
+<dt>Returns:</dt>
+<dd>a <a href="../Cell.html" title="interface in org.apache.hadoop.hbase"><code>Cell</code></a> representing the earliest position the scanner should seek to, or
+ <code>null</code> if this filter cannot provide a better position than the structural hint</dd>
+<dt>Throws:</dt>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></code> - in case an I/O or filter-specific failure needs to be signaled</dd>
+<dt>See Also:</dt>
+<dd>
+<ul class="see-list">
+<li><a href="Filter.html#filterCell(org.apache.hadoop.hbase.Cell)"><code>Filter.filterCell(Cell)</code></a></li>
+<li><a href="Filter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)"><code>Filter.getNextCellHint(Cell)</code></a></li>
+</ul>
+</dd>
+</dl>
+</section>
+</li>
+<li>
<section class="detail" id="toString()">
<h3>toString</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/ColumnPrefixFilter.html#line-151">toString</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/ColumnPrefixFilter.html#line-159">toString</a></span>()</div>
<div class="block"><span class="descfrm-type-label">Description copied from class: <code><a href="FilterBase.html#toString()">FilterBase</a></code></span></div>
<div class="block">Return filter's info for debugging and logging purpose.</div>
<dl class="notes">
@@ -418,7 +482,7 @@ implements <a href="HintingFilter.html" title="interface in org.apache.hadoop.hb
<li>
<section class="detail" id="equals(java.lang.Object)">
<h3>equals</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/ColumnPrefixFilter.html#line-156">equals</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a> obj)</span></div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/ColumnPrefixFilter.html#line-164">equals</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a> obj)</span></div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a></code> in class <code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></code></dd>
@@ -428,7 +492,7 @@ implements <a href="HintingFilter.html" title="interface in org.apache.hadoop.hb
<li>
<section class="detail" id="hashCode()">
<h3>hashCode</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/ColumnPrefixFilter.html#line-161">hashCode</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/ColumnPrefixFilter.html#line-169">hashCode</a></span>()</div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a></code> in class <code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/ColumnRangeFilter.html b/devapidocs/org/apache/hadoop/hbase/filter/ColumnRangeFilter.html
index afe1bbe9b10..9483392be71 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/ColumnRangeFilter.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/ColumnRangeFilter.html
@@ -210,32 +210,37 @@ implements <a href="HintingFilter.html" title="interface in org.apache.hadoop.hb
<div class="block">Filters that are not sure which key must be next seeked to, can inherit this implementation
that, by default, returns a null Cell.</div>
</div>
-<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>int</code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#hashCode()" class="member-name-link">hashCode</a>()</code></div>
-<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
-<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>boolean</code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#isMaxColumnInclusive()" class="member-name-link">isMaxColumnInclusive</a>()</code></div>
-<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
-<div class="block">Returns if max column range is inclusive.</div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
+<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Filters that cannot provide a structural-skip seek hint can inherit this no-op implementation.</div>
</div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>int</code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#hashCode()" class="member-name-link">hashCode</a>()</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>boolean</code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#isMinColumnInclusive()" class="member-name-link">isMinColumnInclusive</a>()</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#isMaxColumnInclusive()" class="member-name-link">isMaxColumnInclusive</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Returns if max column range is inclusive.</div>
+</div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>boolean</code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#isMinColumnInclusive()" class="member-name-link">isMinColumnInclusive</a>()</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns if min column range is inclusive.</div>
</div>
-<div class="col-first odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static <a href="ColumnRangeFilter.html" title="class in org.apache.hadoop.hbase.filter">ColumnRangeFilter</a></code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#parseFrom(byte%5B%5D)" class="member-name-link">parseFrom</a><wbr>(byte[] pbBytes)</code></div>
-<div class="col-last odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">
+<div class="col-first even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static <a href="ColumnRangeFilter.html" title="class in org.apache.hadoop.hbase.filter">ColumnRangeFilter</a></code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#parseFrom(byte%5B%5D)" class="member-name-link">parseFrom</a><wbr>(byte[] pbBytes)</code></div>
+<div class="col-last even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">
<div class="block">Parse a serialized representation of <a href="ColumnRangeFilter.html" title="class in org.apache.hadoop.hbase.filter"><code>ColumnRangeFilter</code></a></div>
</div>
-<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>byte[]</code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toByteArray()" class="member-name-link">toByteArray</a>()</code></div>
-<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>byte[]</code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toByteArray()" class="member-name-link">toByteArray</a>()</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns The filter serialized using pb</div>
</div>
-<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toString()" class="member-name-link">toString</a>()</code></div>
-<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toString()" class="member-name-link">toString</a>()</code></div>
+<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Return filter's info for debugging and logging purpose.</div>
</div>
</div>
@@ -243,7 +248,7 @@ implements <a href="HintingFilter.html" title="interface in org.apache.hadoop.hb
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-org.apache.hadoop.hbase.filter.FilterBase">Methods inherited from class org.apache.hadoop.hbase.filter.<a href="FilterBase.html" title="class in org.apache.hadoop.hbase.filter">FilterBase</a></h3>
-<code><a href="FilterBase.html#filterAllRemaining()">filterAllRemaining</a>, <a href="FilterBase.html#filterRow()">filterRow</a>, <a href="FilterBase.html#filterRowCells(java.util.List)">filterRowCells</a>, <a href="FilterBase.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)">getHintForRejectedRow</a>, <a href="FilterBase.html#getSkipHint(org.apache.hadoop.hbase.Cell)">getSkipHint</a>, <a href="FilterBase.html#hasFilterRow()">hasFilterRow</a>, <a href="FilterBase.html#isFamilyEss [...]
+<code><a href="FilterBase.html#filterAllRemaining()">filterAllRemaining</a>, <a href="FilterBase.html#filterRow()">filterRow</a>, <a href="FilterBase.html#filterRowCells(java.util.List)">filterRowCells</a>, <a href="FilterBase.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)">getHintForRejectedRow</a>, <a href="FilterBase.html#hasFilterRow()">hasFilterRow</a>, <a href="FilterBase.html#isFamilyEssential(byte%5B%5D)">isFamilyEssential</a>, <a href="FilterBase.html#reset()">reset</a [...]
<div class="inherited-list">
<h3 id="methods-inherited-from-class-org.apache.hadoop.hbase.filter.Filter">Methods inherited from class org.apache.hadoop.hbase.filter.<a href="Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a></h3>
<code><a href="Filter.html#isReversed()">isReversed</a>, <a href="Filter.html#setReversed(boolean)">setReversed</a></code></div>
@@ -491,9 +496,68 @@ implements <a href="HintingFilter.html" title="interface in org.apache.hadoop.hb
</section>
</li>
<li>
+<section class="detail" id="getSkipHint(org.apache.hadoop.hbase.Cell)">
+<h3>getSkipHint</h3>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/ColumnRangeFilter.html#line-203">getSkipHint</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</span>
+ throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
+<div class="block"><span class="descfrm-type-label">Description copied from class: <code><a href="FilterBase.html#getSkipHint(org.apache.hadoop.hbase.Cell)">FilterBase</a></code></span></div>
+<div class="block">Filters that cannot provide a structural-skip seek hint can inherit this no-op implementation.
+ Subclasses with purely configuration-driven, stateless hint computation (e.g. a fixed column
+ range or fuzzy-row pattern) may override this to avoid cell-by-cell advancement when the
+ time-range, column, or version gate fires. Provides a seek hint for cells that are structurally skipped by the scan pipeline
+ <em>before</em> <a href="Filter.html#filterCell(org.apache.hadoop.hbase.Cell)"><code>Filter.filterCell(Cell)</code></a> is ever reached. The pipeline short-circuits on
+ several criteria — time-range mismatch, column-set exclusion, and version-limit exhaustion —
+ and in each case the filter is bypassed entirely. When an implementation can compute a
+ meaningful forward position purely from the cell's coordinates (without needing the
+ <code>filterCell</code> call sequence), it should return that position here so the scanner can seek
+ ahead instead of advancing one cell at a time.
+ <p>
+ Contract:
+ <ul>
+ <li>May be called for cells that have <strong>never</strong> been passed to
+ <a href="Filter.html#filterCell(org.apache.hadoop.hbase.Cell)"><code>Filter.filterCell(Cell)</code></a>.</li>
+ <li>Implementations <strong>must not</strong> modify any filter state; this method is treated
+ as logically stateless. Only filters whose hint computation is based solely on immutable
+ configuration (e.g. a fixed column range or a fuzzy-row pattern) should override this.</li>
+ <li>The returned <a href="../Cell.html" title="interface in org.apache.hadoop.hbase"><code>Cell</code></a>, if non-null, must be an
+ <a href="../ExtendedCell.html" title="interface in org.apache.hadoop.hbase"><code>ExtendedCell</code></a> because filters are evaluated on the server
+ side.</li>
+ <li>Returning <code>null</code> (the default) falls through to the existing structural skip/seek
+ behaviour, preserving full backward compatibility.</li>
+ <li>For reversed scans, the returned cell must have a <em>smaller</em> row key (i.e., earlier
+ in reverse-scan direction) than the <code>skippedCell</code>. Hints that do not advance in the scan
+ direction are silently ignored.</li>
+ <li><strong>Composite filter support:</strong> <code>FilterList</code> (both <code>MUST_PASS_ALL</code>
+ and <code>MUST_PASS_ONE</code>), <code>SkipFilter</code>, and <code>WhileMatchFilter</code> delegate this
+ method to their sub-filters and merge the results (maximal step for AND; for OR, the nearest
+ hint is returned only when every non-terminated sub-filter provides one — any null collapses
+ the OR result to null).</li>
+ </ul></div>
+<dl class="notes">
+<dt>Overrides:</dt>
+<dd><code><a href="FilterBase.html#getSkipHint(org.apache.hadoop.hbase.Cell)">getSkipHint</a></code> in class <code><a href="FilterBase.html" title="class in org.apache.hadoop.hbase.filter">FilterBase</a></code></dd>
+<dt>Parameters:</dt>
+<dd><code>skippedCell</code> - the cell that was rejected by the time-range, column, or version gate before
+ <code>filterCell</code> could be consulted</dd>
+<dt>Returns:</dt>
+<dd>a <a href="../Cell.html" title="interface in org.apache.hadoop.hbase"><code>Cell</code></a> representing the earliest position the scanner should seek to, or
+ <code>null</code> if this filter cannot provide a better position than the structural hint</dd>
+<dt>Throws:</dt>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></code> - in case an I/O or filter-specific failure needs to be signaled</dd>
+<dt>See Also:</dt>
+<dd>
+<ul class="see-list">
+<li><a href="Filter.html#filterCell(org.apache.hadoop.hbase.Cell)"><code>Filter.filterCell(Cell)</code></a></li>
+<li><a href="Filter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)"><code>Filter.getNextCellHint(Cell)</code></a></li>
+</ul>
+</dd>
+</dl>
+</section>
+</li>
+<li>
<section class="detail" id="toString()">
<h3>toString</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/ColumnRangeFilter.html#line-203">toString</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/ColumnRangeFilter.html#line-211">toString</a></span>()</div>
<div class="block"><span class="descfrm-type-label">Description copied from class: <code><a href="FilterBase.html#toString()">FilterBase</a></code></span></div>
<div class="block">Return filter's info for debugging and logging purpose.</div>
<dl class="notes">
@@ -505,7 +569,7 @@ implements <a href="HintingFilter.html" title="interface in org.apache.hadoop.hb
<li>
<section class="detail" id="equals(java.lang.Object)">
<h3>equals</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/ColumnRangeFilter.html#line-210">equals</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a> obj)</span></div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/ColumnRangeFilter.html#line-218">equals</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a> obj)</span></div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a></code> in class <code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></code></dd>
@@ -515,7 +579,7 @@ implements <a href="HintingFilter.html" title="interface in org.apache.hadoop.hb
<li>
<section class="detail" id="hashCode()">
<h3>hashCode</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/ColumnRangeFilter.html#line-215">hashCode</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/ColumnRangeFilter.html#line-223">hashCode</a></span>()</div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a></code> in class <code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/Filter.html b/devapidocs/org/apache/hadoop/hbase/filter/Filter.html
index 5892b8157dc..56c7f9cf57c 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/Filter.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/Filter.html
@@ -482,7 +482,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="getHintForRejectedRow(org.apache.hadoop.hbase.Cell)">
<h3>getHintForRejectedRow</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/Filter.html#line-230">getHintForRejectedRow</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstRowCell)</span>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/Filter.html#line-234">getHintForRejectedRow</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstRowCell)</span>
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
<div class="block">Provides a seek hint to bypass row-by-row scanning after <a href="#filterRowKey(org.apache.hadoop.hbase.Cell)"><code>filterRowKey(Cell)</code></a> rejects a
row. When <code>filterRowKey</code> returns <code>true</code> the scan pipeline would normally iterate
@@ -507,9 +507,13 @@ loadScripts(document, 'script');</script>
must point to a <em>smaller</em> row key (earlier in reverse-scan direction). The scanner
validates hint direction and falls back to <code>nextRow()</code> if the hint does not advance in
the scan direction.</li>
- <li><strong>Composite filter limitation:</strong> <code>FilterList</code>, <code>SkipFilter</code>, and
- <code>WhileMatchFilter</code> do not currently delegate this method to wrapped sub-filters. Hints
- from filters used inside these wrappers will be silently ignored.</li>
+ <li><strong>Composite filter support:</strong> <code>FilterList</code> (both <code>MUST_PASS_ALL</code>
+ and <code>MUST_PASS_ONE</code>), <code>SkipFilter</code>, and <code>WhileMatchFilter</code> delegate this
+ method to their sub-filters and merge the results. For AND (<code>MUST_PASS_ALL</code>), only
+ sub-filters whose <code>filterRowKey</code> individually returned <code>true</code> are consulted, and
+ the farthest (maximal-step) hint among them is returned. For OR (<code>MUST_PASS_ONE</code>), the
+ nearest hint is returned only when every non-terminated sub-filter provides one — any null
+ collapses the OR result to null.</li>
</ul></div>
<dl class="notes">
<dt>Parameters:</dt>
@@ -532,7 +536,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="getSkipHint(org.apache.hadoop.hbase.Cell)">
<h3>getSkipHint</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/Filter.html#line-270">getSkipHint</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</span>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/Filter.html#line-276">getSkipHint</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</span>
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
<div class="block">Provides a seek hint for cells that are structurally skipped by the scan pipeline
<em>before</em> <a href="#filterCell(org.apache.hadoop.hbase.Cell)"><code>filterCell(Cell)</code></a> is ever reached. The pipeline short-circuits on
@@ -557,9 +561,11 @@ loadScripts(document, 'script');</script>
<li>For reversed scans, the returned cell must have a <em>smaller</em> row key (i.e., earlier
in reverse-scan direction) than the <code>skippedCell</code>. Hints that do not advance in the scan
direction are silently ignored.</li>
- <li><strong>Composite filter limitation:</strong> <code>FilterList</code>, <code>SkipFilter</code>, and
- <code>WhileMatchFilter</code> do not currently delegate this method to wrapped sub-filters. Hints
- from filters used inside these wrappers will be silently ignored.</li>
+ <li><strong>Composite filter support:</strong> <code>FilterList</code> (both <code>MUST_PASS_ALL</code>
+ and <code>MUST_PASS_ONE</code>), <code>SkipFilter</code>, and <code>WhileMatchFilter</code> delegate this
+ method to their sub-filters and merge the results (maximal step for AND; for OR, the nearest
+ hint is returned only when every non-terminated sub-filter provides one — any null collapses
+ the OR result to null).</li>
</ul></div>
<dl class="notes">
<dt>Parameters:</dt>
@@ -583,7 +589,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="isFamilyEssential(byte[])">
<h3>isFamilyEssential</h3>
-<div class="member-signature"><span class="modifiers">public abstract</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/Filter.html#line-282">isFamilyEssential</a></span><wbr><span class="parameters">(byte[] name)</span>
+<div class="member-signature"><span class="modifiers">public abstract</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/Filter.html#line-288">isFamilyEssential</a></span><wbr><span class="parameters">(byte[] name)</span>
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
<div class="block">Check that given column family is essential for filter to check row. Most filters always return
true here. But some could have more sophisticated logic which could significantly reduce
@@ -599,7 +605,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="toByteArray()">
<h3>toByteArray</h3>
-<div class="member-signature"><span class="modifiers">public abstract</span> <span class="return-type">byte[]</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/Filter.html#line-290">toByteArray</a></span>()
+<div class="member-signature"><span class="modifiers">public abstract</span> <span class="return-type">byte[]</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/Filter.html#line-296">toByteArray</a></span>()
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
<div class="block">TODO: JAVADOC Concrete implementers can signal a failure condition in their code by throwing an
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link"><code>IOException</code></a>.</div>
@@ -614,7 +620,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="parseFrom(byte[])">
<h3>parseFrom</h3>
-<div class="member-signature"><span class="modifiers">public static</span> <span class="return-type"><a href="Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/Filter.html#line-300">parseFrom</a></span><wbr><span class="parameters">(byte[] pbBytes)</span>
+<div class="member-signature"><span class="modifiers">public static</span> <span class="return-type"><a href="Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/Filter.html#line-306">parseFrom</a></span><wbr><span class="parameters">(byte[] pbBytes)</span>
throws <span class="exceptions"><a href="../exceptions/DeserializationException.html" title="class in org.apache.hadoop.hbase.exceptions">DeserializationException</a></span></div>
<div class="block">Concrete implementers can signal a failure condition in their code by throwing an
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link"><code>IOException</code></a>.</div>
@@ -637,7 +643,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="areSerializedFieldsEqual(org.apache.hadoop.hbase.filter.Filter)">
<h3>areSerializedFieldsEqual</h3>
-<div class="member-signature"><span class="modifiers">abstract</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/Filter.html#line-311">areSerializedFieldsEqual</a></span><wbr><span class="parameters">(<a href="Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a> other)</span></div>
+<div class="member-signature"><span class="modifiers">abstract</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/Filter.html#line-317">areSerializedFieldsEqual</a></span><wbr><span class="parameters">(<a href="Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a> other)</span></div>
<div class="block">Concrete implementers can signal a failure condition in their code by throwing an
<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link"><code>IOException</code></a>.</div>
<dl class="notes">
@@ -650,7 +656,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="setReversed(boolean)">
<h3>setReversed</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/Filter.html#line-317">setReversed</a></span><wbr><span class="parameters">(boolean reversed)</span></div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/Filter.html#line-323">setReversed</a></span><wbr><span class="parameters">(boolean reversed)</span></div>
<div class="block">alter the reversed scan flag</div>
<dl class="notes">
<dt>Parameters:</dt>
@@ -661,7 +667,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="isReversed()">
<h3>isReversed</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/Filter.html#line-321">isReversed</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/Filter.html#line-327">isReversed</a></span>()</div>
</section>
</li>
</ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/FilterBase.html b/devapidocs/org/apache/hadoop/hbase/filter/FilterBase.html
index c70831cfede..b093a16f069 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/FilterBase.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/FilterBase.html
@@ -449,9 +449,13 @@ loadScripts(document, 'script');</script>
must point to a <em>smaller</em> row key (earlier in reverse-scan direction). The scanner
validates hint direction and falls back to <code>nextRow()</code> if the hint does not advance in
the scan direction.</li>
- <li><strong>Composite filter limitation:</strong> <code>FilterList</code>, <code>SkipFilter</code>, and
- <code>WhileMatchFilter</code> do not currently delegate this method to wrapped sub-filters. Hints
- from filters used inside these wrappers will be silently ignored.</li>
+ <li><strong>Composite filter support:</strong> <code>FilterList</code> (both <code>MUST_PASS_ALL</code>
+ and <code>MUST_PASS_ONE</code>), <code>SkipFilter</code>, and <code>WhileMatchFilter</code> delegate this
+ method to their sub-filters and merge the results. For AND (<code>MUST_PASS_ALL</code>), only
+ sub-filters whose <code>filterRowKey</code> individually returned <code>true</code> are consulted, and
+ the farthest (maximal-step) hint among them is returned. For OR (<code>MUST_PASS_ONE</code>), the
+ nearest hint is returned only when every non-terminated sub-filter provides one — any null
+ collapses the OR result to null.</li>
</ul></div>
<dl class="notes">
<dt>Overrides:</dt>
@@ -504,9 +508,11 @@ loadScripts(document, 'script');</script>
<li>For reversed scans, the returned cell must have a <em>smaller</em> row key (i.e., earlier
in reverse-scan direction) than the <code>skippedCell</code>. Hints that do not advance in the scan
direction are silently ignored.</li>
- <li><strong>Composite filter limitation:</strong> <code>FilterList</code>, <code>SkipFilter</code>, and
- <code>WhileMatchFilter</code> do not currently delegate this method to wrapped sub-filters. Hints
- from filters used inside these wrappers will be silently ignored.</li>
+ <li><strong>Composite filter support:</strong> <code>FilterList</code> (both <code>MUST_PASS_ALL</code>
+ and <code>MUST_PASS_ONE</code>), <code>SkipFilter</code>, and <code>WhileMatchFilter</code> delegate this
+ method to their sub-filters and merge the results (maximal step for AND; for OR, the nearest
+ hint is returned only when every non-terminated sub-filter provides one — any null collapses
+ the OR result to null).</li>
</ul></div>
<dl class="notes">
<dt>Overrides:</dt>
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/FilterList.html b/devapidocs/org/apache/hadoop/hbase/filter/FilterList.html
index 1a4214eda8f..c22ce47030c 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/FilterList.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/FilterList.html
@@ -231,16 +231,27 @@ loadScripts(document, 'script');</script>
<div class="block">Get the filters.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)" class="member-name-link">getHintForRejectedRow</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstRowCell)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Filters that cannot provide a seek hint after row-key rejection can inherit this no-op
+ implementation.</div>
+</div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Filters that are not sure which key must be next seeked to, can inherit this implementation
that, by default, returns a null Cell.</div>
</div>
-<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="FilterList.Operator.html" title="enum class in org.apache.hadoop.hbase.filter">FilterList.Operator</a></code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getOperator()" class="member-name-link">getOperator</a>()</code></div>
-<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="FilterList.Operator.html" title="enum class in org.apache.hadoop.hbase.filter">FilterList.Operator</a></code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getOperator()" class="member-name-link">getOperator</a>()</code></div>
+<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Get the operator.</div>
</div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Filters that cannot provide a structural-skip seek hint can inherit this no-op implementation.</div>
+</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>boolean</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#hasFilterRow()" class="member-name-link">hasFilterRow</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
@@ -297,7 +308,7 @@ loadScripts(document, 'script');</script>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-org.apache.hadoop.hbase.filter.FilterBase">Methods inherited from class org.apache.hadoop.hbase.filter.<a href="FilterBase.html" title="class in org.apache.hadoop.hbase.filter">FilterBase</a></h3>
-<code><a href="FilterBase.html#createFilterFromArguments(java.util.ArrayList)">createFilterFromArguments</a>, <a href="FilterBase.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)">getHintForRejectedRow</a>, <a href="FilterBase.html#getSkipHint(org.apache.hadoop.hbase.Cell)">getSkipHint</a></code></div>
+<code><a href="FilterBase.html#createFilterFromArguments(java.util.ArrayList)">createFilterFromArguments</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-java.lang.Object">Methods inherited from class java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#finalize()" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in [...]
@@ -694,9 +705,128 @@ loadScripts(document, 'script');</script>
</section>
</li>
<li>
+<section class="detail" id="getHintForRejectedRow(org.apache.hadoop.hbase.Cell)">
+<h3>getHintForRejectedRow</h3>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterList.html#line-245">getHintForRejectedRow</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstRowCell)</span>
+ throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
+<div class="block"><span class="descfrm-type-label">Description copied from class: <code><a href="FilterBase.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)">FilterBase</a></code></span></div>
+<div class="block">Filters that cannot provide a seek hint after row-key rejection can inherit this no-op
+ implementation. Subclasses whose row-key logic (e.g. a range pointer advanced inside
+ <a href="FilterBase.html#filterRowKey(org.apache.hadoop.hbase.Cell)"><code>FilterBase.filterRowKey(Cell)</code></a>) makes a better seek target available should override this.
+ Provides a seek hint to bypass row-by-row scanning after <a href="Filter.html#filterRowKey(org.apache.hadoop.hbase.Cell)"><code>Filter.filterRowKey(Cell)</code></a> rejects a
+ row. When <code>filterRowKey</code> returns <code>true</code> the scan pipeline would normally iterate
+ through every remaining cell in the rejected row one-by-one (via <code>nextRow()</code>) before
+ moving on. If the filter can determine a better forward position — for example, the next range
+ boundary in a <code>MultiRowRangeFilter</code> — it should return that target cell here, allowing
+ the scanner to seek directly past the unwanted rows.
+ <p>
+ Contract:
+ <ul>
+ <li>Only called after <a href="Filter.html#filterRowKey(org.apache.hadoop.hbase.Cell)"><code>Filter.filterRowKey(Cell)</code></a> has returned <code>true</code> for the same
+ <code>firstRowCell</code>.</li>
+ <li>Implementations may use state that was set during <a href="Filter.html#filterRowKey(org.apache.hadoop.hbase.Cell)"><code>Filter.filterRowKey(Cell)</code></a> (e.g. an
+ updated range pointer), but <strong>must not</strong> invoke <a href="Filter.html#filterCell(org.apache.hadoop.hbase.Cell)"><code>Filter.filterCell(Cell)</code></a> logic —
+ the caller guarantees that <code>filterCell</code> has not been called for this row.</li>
+ <li>The returned <a href="../Cell.html" title="interface in org.apache.hadoop.hbase"><code>Cell</code></a>, if non-null, must be an
+ <a href="../ExtendedCell.html" title="interface in org.apache.hadoop.hbase"><code>ExtendedCell</code></a> because filters are evaluated on the server
+ side.</li>
+ <li>Returning <code>null</code> (the default) falls through to the existing <code>nextRow()</code>
+ behaviour, preserving full backward compatibility.</li>
+ <li>For reversed scans (<a href="../client/Scan.html#isReversed()"><code>Scan.isReversed()</code></a>), the hint
+ must point to a <em>smaller</em> row key (earlier in reverse-scan direction). The scanner
+ validates hint direction and falls back to <code>nextRow()</code> if the hint does not advance in
+ the scan direction.</li>
+ <li><strong>Composite filter support:</strong> <code>FilterList</code> (both <code>MUST_PASS_ALL</code>
+ and <code>MUST_PASS_ONE</code>), <code>SkipFilter</code>, and <code>WhileMatchFilter</code> delegate this
+ method to their sub-filters and merge the results. For AND (<code>MUST_PASS_ALL</code>), only
+ sub-filters whose <code>filterRowKey</code> individually returned <code>true</code> are consulted, and
+ the farthest (maximal-step) hint among them is returned. For OR (<code>MUST_PASS_ONE</code>), the
+ nearest hint is returned only when every non-terminated sub-filter provides one — any null
+ collapses the OR result to null.</li>
+ </ul></div>
+<dl class="notes">
+<dt>Overrides:</dt>
+<dd><code><a href="FilterBase.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)">getHintForRejectedRow</a></code> in class <code><a href="FilterBase.html" title="class in org.apache.hadoop.hbase.filter">FilterBase</a></code></dd>
+<dt>Parameters:</dt>
+<dd><code>firstRowCell</code> - the first cell encountered in the rejected row; contains the row key that
+ was passed to <code>filterRowKey</code></dd>
+<dt>Returns:</dt>
+<dd>a <a href="../Cell.html" title="interface in org.apache.hadoop.hbase"><code>Cell</code></a> representing the earliest position the scanner should seek to, or
+ <code>null</code> if this filter cannot provide a better position than a sequential skip</dd>
+<dt>Throws:</dt>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></code> - in case an I/O or filter-specific failure needs to be signaled</dd>
+<dt>See Also:</dt>
+<dd>
+<ul class="see-list">
+<li><a href="Filter.html#filterRowKey(org.apache.hadoop.hbase.Cell)"><code>Filter.filterRowKey(Cell)</code></a></li>
+</ul>
+</dd>
+</dl>
+</section>
+</li>
+<li>
+<section class="detail" id="getSkipHint(org.apache.hadoop.hbase.Cell)">
+<h3>getSkipHint</h3>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterList.html#line-250">getSkipHint</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</span>
+ throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
+<div class="block"><span class="descfrm-type-label">Description copied from class: <code><a href="FilterBase.html#getSkipHint(org.apache.hadoop.hbase.Cell)">FilterBase</a></code></span></div>
+<div class="block">Filters that cannot provide a structural-skip seek hint can inherit this no-op implementation.
+ Subclasses with purely configuration-driven, stateless hint computation (e.g. a fixed column
+ range or fuzzy-row pattern) may override this to avoid cell-by-cell advancement when the
+ time-range, column, or version gate fires. Provides a seek hint for cells that are structurally skipped by the scan pipeline
+ <em>before</em> <a href="Filter.html#filterCell(org.apache.hadoop.hbase.Cell)"><code>Filter.filterCell(Cell)</code></a> is ever reached. The pipeline short-circuits on
+ several criteria — time-range mismatch, column-set exclusion, and version-limit exhaustion —
+ and in each case the filter is bypassed entirely. When an implementation can compute a
+ meaningful forward position purely from the cell's coordinates (without needing the
+ <code>filterCell</code> call sequence), it should return that position here so the scanner can seek
+ ahead instead of advancing one cell at a time.
+ <p>
+ Contract:
+ <ul>
+ <li>May be called for cells that have <strong>never</strong> been passed to
+ <a href="Filter.html#filterCell(org.apache.hadoop.hbase.Cell)"><code>Filter.filterCell(Cell)</code></a>.</li>
+ <li>Implementations <strong>must not</strong> modify any filter state; this method is treated
+ as logically stateless. Only filters whose hint computation is based solely on immutable
+ configuration (e.g. a fixed column range or a fuzzy-row pattern) should override this.</li>
+ <li>The returned <a href="../Cell.html" title="interface in org.apache.hadoop.hbase"><code>Cell</code></a>, if non-null, must be an
+ <a href="../ExtendedCell.html" title="interface in org.apache.hadoop.hbase"><code>ExtendedCell</code></a> because filters are evaluated on the server
+ side.</li>
+ <li>Returning <code>null</code> (the default) falls through to the existing structural skip/seek
+ behaviour, preserving full backward compatibility.</li>
+ <li>For reversed scans, the returned cell must have a <em>smaller</em> row key (i.e., earlier
+ in reverse-scan direction) than the <code>skippedCell</code>. Hints that do not advance in the scan
+ direction are silently ignored.</li>
+ <li><strong>Composite filter support:</strong> <code>FilterList</code> (both <code>MUST_PASS_ALL</code>
+ and <code>MUST_PASS_ONE</code>), <code>SkipFilter</code>, and <code>WhileMatchFilter</code> delegate this
+ method to their sub-filters and merge the results (maximal step for AND; for OR, the nearest
+ hint is returned only when every non-terminated sub-filter provides one — any null collapses
+ the OR result to null).</li>
+ </ul></div>
+<dl class="notes">
+<dt>Overrides:</dt>
+<dd><code><a href="FilterBase.html#getSkipHint(org.apache.hadoop.hbase.Cell)">getSkipHint</a></code> in class <code><a href="FilterBase.html" title="class in org.apache.hadoop.hbase.filter">FilterBase</a></code></dd>
+<dt>Parameters:</dt>
+<dd><code>skippedCell</code> - the cell that was rejected by the time-range, column, or version gate before
+ <code>filterCell</code> could be consulted</dd>
+<dt>Returns:</dt>
+<dd>a <a href="../Cell.html" title="interface in org.apache.hadoop.hbase"><code>Cell</code></a> representing the earliest position the scanner should seek to, or
+ <code>null</code> if this filter cannot provide a better position than the structural hint</dd>
+<dt>Throws:</dt>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></code> - in case an I/O or filter-specific failure needs to be signaled</dd>
+<dt>See Also:</dt>
+<dd>
+<ul class="see-list">
+<li><a href="Filter.html#filterCell(org.apache.hadoop.hbase.Cell)"><code>Filter.filterCell(Cell)</code></a></li>
+<li><a href="Filter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)"><code>Filter.getNextCellHint(Cell)</code></a></li>
+</ul>
+</dd>
+</dl>
+</section>
+</li>
+<li>
<section class="detail" id="isFamilyEssential(byte[])">
<h3>isFamilyEssential</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterList.html#line-245">isFamilyEssential</a></span><wbr><span class="parameters">(byte[] name)</span>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterList.html#line-255">isFamilyEssential</a></span><wbr><span class="parameters">(byte[] name)</span>
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
<div class="block"><span class="descfrm-type-label">Description copied from class: <code><a href="FilterBase.html#isFamilyEssential(byte%5B%5D)">FilterBase</a></code></span></div>
<div class="block">By default, we require all scan's column families to be present. Our subclasses may be more
@@ -716,7 +846,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="setReversed(boolean)">
<h3>setReversed</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterList.html#line-250">setReversed</a></span><wbr><span class="parameters">(boolean reversed)</span></div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterList.html#line-260">setReversed</a></span><wbr><span class="parameters">(boolean reversed)</span></div>
<div class="block"><span class="descfrm-type-label">Description copied from class: <code><a href="Filter.html#setReversed(boolean)">Filter</a></code></span></div>
<div class="block">alter the reversed scan flag</div>
<dl class="notes">
@@ -730,7 +860,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="isReversed()">
<h3>isReversed</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterList.html#line-256">isReversed</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterList.html#line-266">isReversed</a></span>()</div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="Filter.html#isReversed()">isReversed</a></code> in class <code><a href="Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a></code></dd>
@@ -740,7 +870,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="toString()">
<h3>toString</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterList.html#line-262">toString</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterList.html#line-272">toString</a></span>()</div>
<div class="block"><span class="descfrm-type-label">Description copied from class: <code><a href="FilterBase.html#toString()">FilterBase</a></code></span></div>
<div class="block">Return filter's info for debugging and logging purpose.</div>
<dl class="notes">
@@ -752,7 +882,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="equals(java.lang.Object)">
<h3>equals</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterList.html#line-267">equals</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a> obj)</span></div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterList.html#line-277">equals</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a> obj)</span></div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a></code> in class <code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></code></dd>
@@ -762,7 +892,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="hashCode()">
<h3>hashCode</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterList.html#line-272">hashCode</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterList.html#line-282">hashCode</a></span>()</div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a></code> in class <code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/FilterListWithAND.html b/devapidocs/org/apache/hadoop/hbase/filter/FilterListWithAND.html
index 2cec0917a99..382e79f66ab 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/FilterListWithAND.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/FilterListWithAND.html
@@ -84,7 +84,7 @@ loadScripts(document, 'script');</script>
<section class="class-description" id="class-description">
<hr>
<div class="type-signature"><span class="annotations">@Private
-</span><span class="modifiers">public class </span><span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-32">FilterListWithAND</a></span>
+</span><span class="modifiers">public class </span><span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-33">FilterListWithAND</a></span>
<span class="extends-implements">extends <a href="FilterListBase.html" title="class in org.apache.hadoop.hbase.filter">FilterListBase</a></span></div>
<div class="block">FilterListWithAND represents an ordered list of filters which will be evaluated with an AND
operator.</div>
@@ -112,9 +112,14 @@ loadScripts(document, 'script');</script>
<div class="col-first even-row-color"><code>private boolean[]</code></div>
<div class="col-second even-row-color"><code><a href="#hintingFilters" class="member-name-link">hintingFilters</a></code></div>
<div class="col-last even-row-color"> </div>
-<div class="col-first odd-row-color"><code>private <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a><<a href="Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a>></code></div>
-<div class="col-second odd-row-color"><code><a href="#seekHintFilters" class="member-name-link">seekHintFilters</a></code></div>
-<div class="col-last odd-row-color"> </div>
+<div class="col-first odd-row-color"><code>private boolean[]</code></div>
+<div class="col-second odd-row-color"><code><a href="#rejectedByFilterRowKey" class="member-name-link">rejectedByFilterRowKey</a></code></div>
+<div class="col-last odd-row-color">
+<div class="block">Tracks which sub-filters returned <code>true</code> from <a href="Filter.html#filterRowKey(org.apache.hadoop.hbase.Cell)"><code>Filter.filterRowKey(Cell)</code></a>.</div>
+</div>
+<div class="col-first even-row-color"><code>private <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a><<a href="Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a>></code></div>
+<div class="col-second even-row-color"><code><a href="#seekHintFilters" class="member-name-link">seekHintFilters</a></code></div>
+<div class="col-last even-row-color"> </div>
</div>
<div class="inherited-list">
<h3 id="fields-inherited-from-class-org.apache.hadoop.hbase.filter.FilterListBase">Fields inherited from class org.apache.hadoop.hbase.filter.<a href="FilterListBase.html" title="class in org.apache.hadoop.hbase.filter">FilterListBase</a></h3>
@@ -186,11 +191,21 @@ loadScripts(document, 'script');</script>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#formatLogFilters(java.util.List)" class="member-name-link">formatLogFilters</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a><<a href="Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a>> logFilters)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)" class="member-name-link">getHintForRejectedRow</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstRowCell)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Maximal step: return the farthest hint among sub-filters that actually rejected the row.</div>
+</div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Filters that are not sure which key must be next seeked to, can inherit this implementation
that, by default, returns a null Cell.</div>
</div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
+<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Maximal step: return the farthest skip hint among sub-filters.</div>
+</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>int</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#hashCode()" class="member-name-link">hashCode</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
@@ -217,7 +232,7 @@ loadScripts(document, 'script');</script>
<code><a href="FilterListBase.html#checkAndGetReversed(java.util.List,boolean)">checkAndGetReversed</a>, <a href="FilterListBase.html#compareCell(org.apache.hadoop.hbase.Cell,org.apache.hadoop.hbase.Cell)">compareCell</a>, <a href="FilterListBase.html#filterRowCells(java.util.List)">filterRowCells</a>, <a href="FilterListBase.html#getFilters()">getFilters</a>, <a href="FilterListBase.html#hasFilterRow()">hasFilterRow</a>, <a href="FilterListBase.html#isEmpty()">isEmpty</a>, <a href="Filt [...]
<div class="inherited-list">
<h3 id="methods-inherited-from-class-org.apache.hadoop.hbase.filter.FilterBase">Methods inherited from class org.apache.hadoop.hbase.filter.<a href="FilterBase.html" title="class in org.apache.hadoop.hbase.filter">FilterBase</a></h3>
-<code><a href="FilterBase.html#areSerializedFieldsEqual(org.apache.hadoop.hbase.filter.Filter)">areSerializedFieldsEqual</a>, <a href="FilterBase.html#createFilterFromArguments(java.util.ArrayList)">createFilterFromArguments</a>, <a href="FilterBase.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)">getHintForRejectedRow</a>, <a href="FilterBase.html#getSkipHint(org.apache.hadoop.hbase.Cell)">getSkipHint</a>, <a href="FilterBase.html#toByteArray()">toByteArray</a></code></div>
+<code><a href="FilterBase.html#areSerializedFieldsEqual(org.apache.hadoop.hbase.filter.Filter)">areSerializedFieldsEqual</a>, <a href="FilterBase.html#createFilterFromArguments(java.util.ArrayList)">createFilterFromArguments</a>, <a href="FilterBase.html#toByteArray()">toByteArray</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-org.apache.hadoop.hbase.filter.Filter">Methods inherited from class org.apache.hadoop.hbase.filter.<a href="Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a></h3>
<code><a href="Filter.html#isReversed()">isReversed</a>, <a href="Filter.html#parseFrom(byte%5B%5D)">parseFrom</a></code></div>
@@ -238,13 +253,22 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="seekHintFilters">
<h3>seekHintFilters</h3>
-<div class="member-signature"><span class="modifiers">private</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a><<a href="Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a>></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-35">seekHin [...]
+<div class="member-signature"><span class="modifiers">private</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a><<a href="Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a>></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-36">seekHin [...]
</section>
</li>
<li>
<section class="detail" id="hintingFilters">
<h3>hintingFilters</h3>
-<div class="member-signature"><span class="modifiers">private</span> <span class="return-type">boolean[]</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-36">hintingFilters</a></span></div>
+<div class="member-signature"><span class="modifiers">private</span> <span class="return-type">boolean[]</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-37">hintingFilters</a></span></div>
+</section>
+</li>
+<li>
+<section class="detail" id="rejectedByFilterRowKey">
+<h3>rejectedByFilterRowKey</h3>
+<div class="member-signature"><span class="modifiers">private</span> <span class="return-type">boolean[]</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-43">rejectedByFilterRowKey</a></span></div>
+<div class="block">Tracks which sub-filters returned <code>true</code> from <a href="Filter.html#filterRowKey(org.apache.hadoop.hbase.Cell)"><code>Filter.filterRowKey(Cell)</code></a>. Set in
+ <code>filterRowKey()</code>, consumed by <code>getHintForRejectedRow()</code>, cleared only by
+ <code>reset()</code> — callers must invoke <code>reset()</code> between rows to avoid stale state.</div>
</section>
</li>
</ul>
@@ -258,7 +282,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="<init>(java.util.List)">
<h3>FilterListWithAND</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-38">FilterListWithAND</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a><<a href="Filter.html" title="class in org.apache.hadoop.hbase.filter">Fi [...]
+<div class="member-signature"><span class="modifiers">public</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-45">FilterListWithAND</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a><<a href="Filter.html" title="class in org.apache.hadoop.hbase.filter">Fi [...]
</section>
</li>
</ul>
@@ -272,7 +296,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="addFilterLists(java.util.List)">
<h3>addFilterLists</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-47">addFilterLists</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a><<a href="Filter.html" title="cla [...]
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-55">addFilterLists</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a><<a href="Filter.html" title="cla [...]
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="FilterListBase.html#addFilterLists(java.util.List)">addFilterLists</a></code> in class <code><a href="FilterListBase.html" title="class in org.apache.hadoop.hbase.filter">FilterListBase</a></code></dd>
@@ -282,7 +306,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="formatLogFilters(java.util.List)">
<h3>formatLogFilters</h3>
-<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-57">formatLogFilters</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.co [...]
+<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-66">formatLogFilters</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.co [...]
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="FilterListBase.html#formatLogFilters(java.util.List)">formatLogFilters</a></code> in class <code><a href="FilterListBase.html" title="class in org.apache.hadoop.hbase.filter">FilterListBase</a></code></dd>
@@ -292,7 +316,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="cacheHintingFilters()">
<h3>cacheHintingFilters</h3>
-<div class="member-signature"><span class="modifiers">private</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-67">cacheHintingFilters</a></span>()</div>
+<div class="member-signature"><span class="modifiers">private</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-76">cacheHintingFilters</a></span>()</div>
<div class="block">As checks for this are in the hot path, we want them as fast as possible, so we are caching the
status in an array.</div>
</section>
@@ -300,7 +324,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="mergeReturnCode(org.apache.hadoop.hbase.filter.Filter.ReturnCode,org.apache.hadoop.hbase.filter.Filter.ReturnCode)">
<h3>mergeReturnCode</h3>
-<div class="member-signature"><span class="modifiers">private</span> <span class="return-type"><a href="Filter.ReturnCode.html" title="enum class in org.apache.hadoop.hbase.filter">Filter.ReturnCode</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-114">mergeReturnCode</a></span><wbr><span class="parameters">(<a href="Filter.ReturnCode.html" title="enum class in org.apache.hadoop.hbase.filter">Filte [...]
+<div class="member-signature"><span class="modifiers">private</span> <span class="return-type"><a href="Filter.ReturnCode.html" title="enum class in org.apache.hadoop.hbase.filter">Filter.ReturnCode</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-123">mergeReturnCode</a></span><wbr><span class="parameters">(<a href="Filter.ReturnCode.html" title="enum class in org.apache.hadoop.hbase.filter">Filte [...]
<a href="Filter.ReturnCode.html" title="enum class in org.apache.hadoop.hbase.filter">Filter.ReturnCode</a> localRC)</span></div>
<div class="block">FilterList with MUST_PASS_ALL choose the maximal forward step among sub-filters in filter list.
Let's call it: The Maximal Step Rule. So if filter-A in filter list return INCLUDE and filter-B
@@ -345,13 +369,13 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="isIncludeRelatedReturnCode(org.apache.hadoop.hbase.filter.Filter.ReturnCode)">
<h3>isIncludeRelatedReturnCode</h3>
-<div class="member-signature"><span class="modifiers">private</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-177">isIncludeRelatedReturnCode</a></span><wbr><span class="parameters">(<a href="Filter.ReturnCode.html" title="enum class in org.apache.hadoop.hbase.filter">Filter.ReturnCode</a> rc)</span></div>
+<div class="member-signature"><span class="modifiers">private</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-186">isIncludeRelatedReturnCode</a></span><wbr><span class="parameters">(<a href="Filter.ReturnCode.html" title="enum class in org.apache.hadoop.hbase.filter">Filter.ReturnCode</a> rc)</span></div>
</section>
</li>
<li>
<section class="detail" id="filterCell(org.apache.hadoop.hbase.Cell)">
<h3>filterCell</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="Filter.ReturnCode.html" title="enum class in org.apache.hadoop.hbase.filter">Filter.ReturnCode</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-182">filterCell</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> c)</span>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="Filter.ReturnCode.html" title="enum class in org.apache.hadoop.hbase.filter">Filter.ReturnCode</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-191">filterCell</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> c)</span>
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
<div class="block"><span class="descfrm-type-label">Description copied from class: <code><a href="Filter.html#filterCell(org.apache.hadoop.hbase.Cell)">Filter</a></code></span></div>
<div class="block">A way to filter based on the column family, column qualifier and/or the column value. Return
@@ -383,7 +407,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="reset()">
<h3>reset</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-234">reset</a></span>()
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">void</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-243">reset</a></span>()
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
<div class="block"><span class="descfrm-type-label">Description copied from class: <code><a href="FilterBase.html#reset()">FilterBase</a></code></span></div>
<div class="block">Filters that are purely stateless and do nothing in their reset() methods can inherit this
@@ -400,7 +424,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="filterRowKey(org.apache.hadoop.hbase.Cell)">
<h3>filterRowKey</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-242">filterRowKey</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstRowCell)</span>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-252">filterRowKey</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstRowCell)</span>
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
<div class="block"><span class="descfrm-type-label">Description copied from class: <code><a href="Filter.html#filterRowKey(org.apache.hadoop.hbase.Cell)">Filter</a></code></span></div>
<div class="block">Filters a row based on the row key. If this returns true, the entire row will be excluded. If
@@ -423,7 +447,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="filterAllRemaining()">
<h3>filterAllRemaining</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-272">filterAllRemaining</a></span>()
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-284">filterAllRemaining</a></span>()
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
<div class="block"><span class="descfrm-type-label">Description copied from class: <code><a href="FilterBase.html#filterAllRemaining()">FilterBase</a></code></span></div>
<div class="block">Filters that never filter all remaining can inherit this implementation that never stops the
@@ -442,7 +466,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="filterRow()">
<h3>filterRow</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-285">filterRow</a></span>()
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-297">filterRow</a></span>()
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
<div class="block"><span class="descfrm-type-label">Description copied from class: <code><a href="FilterBase.html#filterRow()">FilterBase</a></code></span></div>
<div class="block">Filters that never filter by rows based on previously gathered state from
@@ -464,7 +488,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="getNextCellHint(org.apache.hadoop.hbase.Cell)">
<h3>getNextCellHint</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-299">getNextCellHint</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</span>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-311">getNextCellHint</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</span>
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
<div class="block"><span class="descfrm-type-label">Description copied from class: <code><a href="FilterBase.html#getNextCellHint(org.apache.hadoop.hbase.Cell)">FilterBase</a></code></span></div>
<div class="block">Filters that are not sure which key must be next seeked to, can inherit this implementation
@@ -486,9 +510,65 @@ loadScripts(document, 'script');</script>
</section>
</li>
<li>
+<section class="detail" id="getHintForRejectedRow(org.apache.hadoop.hbase.Cell)">
+<h3>getHintForRejectedRow</h3>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-339">getHintForRejectedRow</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstRowCell)</span>
+ throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
+<div class="block">Maximal step: return the farthest hint among sub-filters that actually rejected the row. Only
+ sub-filters whose <a href="Filter.html#filterRowKey(org.apache.hadoop.hbase.Cell)"><code>Filter.filterRowKey(Cell)</code></a> returned <code>true</code> are consulted,
+ honouring the per-filter contract. Null hints are ignored; if no rejecting sub-filter provides
+ a hint, return null.</div>
+<dl class="notes">
+<dt>Overrides:</dt>
+<dd><code><a href="FilterBase.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)">getHintForRejectedRow</a></code> in class <code><a href="FilterBase.html" title="class in org.apache.hadoop.hbase.filter">FilterBase</a></code></dd>
+<dt>Parameters:</dt>
+<dd><code>firstRowCell</code> - the first cell encountered in the rejected row; contains the row key that
+ was passed to <code>filterRowKey</code></dd>
+<dt>Returns:</dt>
+<dd>a <a href="../Cell.html" title="interface in org.apache.hadoop.hbase"><code>Cell</code></a> representing the earliest position the scanner should seek to, or
+ <code>null</code> if this filter cannot provide a better position than a sequential skip</dd>
+<dt>Throws:</dt>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></code> - in case an I/O or filter-specific failure needs to be signaled</dd>
+<dt>See Also:</dt>
+<dd>
+<ul class="see-list">
+<li><a href="Filter.html#filterRowKey(org.apache.hadoop.hbase.Cell)"><code>Filter.filterRowKey(Cell)</code></a></li>
+</ul>
+</dd>
+</dl>
+</section>
+</li>
+<li>
+<section class="detail" id="getSkipHint(org.apache.hadoop.hbase.Cell)">
+<h3>getSkipHint</h3>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-365">getSkipHint</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</span>
+ throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
+<div class="block">Maximal step: return the farthest skip hint among sub-filters.</div>
+<dl class="notes">
+<dt>Overrides:</dt>
+<dd><code><a href="FilterBase.html#getSkipHint(org.apache.hadoop.hbase.Cell)">getSkipHint</a></code> in class <code><a href="FilterBase.html" title="class in org.apache.hadoop.hbase.filter">FilterBase</a></code></dd>
+<dt>Parameters:</dt>
+<dd><code>skippedCell</code> - the cell that was rejected by the time-range, column, or version gate before
+ <code>filterCell</code> could be consulted</dd>
+<dt>Returns:</dt>
+<dd>a <a href="../Cell.html" title="interface in org.apache.hadoop.hbase"><code>Cell</code></a> representing the earliest position the scanner should seek to, or
+ <code>null</code> if this filter cannot provide a better position than the structural hint</dd>
+<dt>Throws:</dt>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></code> - in case an I/O or filter-specific failure needs to be signaled</dd>
+<dt>See Also:</dt>
+<dd>
+<ul class="see-list">
+<li><a href="Filter.html#filterCell(org.apache.hadoop.hbase.Cell)"><code>Filter.filterCell(Cell)</code></a></li>
+<li><a href="Filter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)"><code>Filter.getNextCellHint(Cell)</code></a></li>
+</ul>
+</dd>
+</dl>
+</section>
+</li>
+<li>
<section class="detail" id="equals(java.lang.Object)">
<h3>equals</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-321">equals</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a> obj)</span></div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-387">equals</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a> obj)</span></div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a></code> in class <code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></code></dd>
@@ -498,7 +578,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="hashCode()">
<h3>hashCode</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-333">hashCode</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html#line-399">hashCode</a></span>()</div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a></code> in class <code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/FilterListWithOR.html b/devapidocs/org/apache/hadoop/hbase/filter/FilterListWithOR.html
index 384e30a7b15..65f630ac454 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/FilterListWithOR.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/FilterListWithOR.html
@@ -192,11 +192,21 @@ loadScripts(document, 'script');</script>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#formatLogFilters(java.util.List)" class="member-name-link">formatLogFilters</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a><<a href="Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a>> logFilters)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)" class="member-name-link">getHintForRejectedRow</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstRowCell)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Minimal step: return the nearest hint.</div>
+</div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getNextCellHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getNextCellHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> currentCell)</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Filters that are not sure which key must be next seeked to, can inherit this implementation
that, by default, returns a null Cell.</div>
</div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
+<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Minimal step: return the nearest skip hint.</div>
+</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>int</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#hashCode()" class="member-name-link">hashCode</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
@@ -229,7 +239,7 @@ loadScripts(document, 'script');</script>
<code><a href="FilterListBase.html#checkAndGetReversed(java.util.List,boolean)">checkAndGetReversed</a>, <a href="FilterListBase.html#compareCell(org.apache.hadoop.hbase.Cell,org.apache.hadoop.hbase.Cell)">compareCell</a>, <a href="FilterListBase.html#filterRowCells(java.util.List)">filterRowCells</a>, <a href="FilterListBase.html#getFilters()">getFilters</a>, <a href="FilterListBase.html#hasFilterRow()">hasFilterRow</a>, <a href="FilterListBase.html#isEmpty()">isEmpty</a>, <a href="Filt [...]
<div class="inherited-list">
<h3 id="methods-inherited-from-class-org.apache.hadoop.hbase.filter.FilterBase">Methods inherited from class org.apache.hadoop.hbase.filter.<a href="FilterBase.html" title="class in org.apache.hadoop.hbase.filter">FilterBase</a></h3>
-<code><a href="FilterBase.html#areSerializedFieldsEqual(org.apache.hadoop.hbase.filter.Filter)">areSerializedFieldsEqual</a>, <a href="FilterBase.html#createFilterFromArguments(java.util.ArrayList)">createFilterFromArguments</a>, <a href="FilterBase.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)">getHintForRejectedRow</a>, <a href="FilterBase.html#getSkipHint(org.apache.hadoop.hbase.Cell)">getSkipHint</a>, <a href="FilterBase.html#toByteArray()">toByteArray</a></code></div>
+<code><a href="FilterBase.html#areSerializedFieldsEqual(org.apache.hadoop.hbase.filter.Filter)">areSerializedFieldsEqual</a>, <a href="FilterBase.html#createFilterFromArguments(java.util.ArrayList)">createFilterFromArguments</a>, <a href="FilterBase.html#toByteArray()">toByteArray</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-org.apache.hadoop.hbase.filter.Filter">Methods inherited from class org.apache.hadoop.hbase.filter.<a href="Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a></h3>
<code><a href="Filter.html#isReversed()">isReversed</a>, <a href="Filter.html#parseFrom(byte%5B%5D)">parseFrom</a></code></div>
@@ -543,9 +553,64 @@ loadScripts(document, 'script');</script>
</section>
</li>
<li>
+<section class="detail" id="getHintForRejectedRow(org.apache.hadoop.hbase.Cell)">
+<h3>getHintForRejectedRow</h3>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithOR.html#line-399">getHintForRejectedRow</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstRowCell)</span>
+ throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
+<div class="block">Minimal step: return the nearest hint. If any non-terminated sub-filter returns null, the
+ composite cannot safely skip, so return null.</div>
+<dl class="notes">
+<dt>Overrides:</dt>
+<dd><code><a href="FilterBase.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)">getHintForRejectedRow</a></code> in class <code><a href="FilterBase.html" title="class in org.apache.hadoop.hbase.filter">FilterBase</a></code></dd>
+<dt>Parameters:</dt>
+<dd><code>firstRowCell</code> - the first cell encountered in the rejected row; contains the row key that
+ was passed to <code>filterRowKey</code></dd>
+<dt>Returns:</dt>
+<dd>a <a href="../Cell.html" title="interface in org.apache.hadoop.hbase"><code>Cell</code></a> representing the earliest position the scanner should seek to, or
+ <code>null</code> if this filter cannot provide a better position than a sequential skip</dd>
+<dt>Throws:</dt>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></code> - in case an I/O or filter-specific failure needs to be signaled</dd>
+<dt>See Also:</dt>
+<dd>
+<ul class="see-list">
+<li><a href="Filter.html#filterRowKey(org.apache.hadoop.hbase.Cell)"><code>Filter.filterRowKey(Cell)</code></a></li>
+</ul>
+</dd>
+</dl>
+</section>
+</li>
+<li>
+<section class="detail" id="getSkipHint(org.apache.hadoop.hbase.Cell)">
+<h3>getSkipHint</h3>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithOR.html#line-425">getSkipHint</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</span>
+ throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
+<div class="block">Minimal step: return the nearest skip hint. Null from any sub-filter collapses the entire
+ result to null.</div>
+<dl class="notes">
+<dt>Overrides:</dt>
+<dd><code><a href="FilterBase.html#getSkipHint(org.apache.hadoop.hbase.Cell)">getSkipHint</a></code> in class <code><a href="FilterBase.html" title="class in org.apache.hadoop.hbase.filter">FilterBase</a></code></dd>
+<dt>Parameters:</dt>
+<dd><code>skippedCell</code> - the cell that was rejected by the time-range, column, or version gate before
+ <code>filterCell</code> could be consulted</dd>
+<dt>Returns:</dt>
+<dd>a <a href="../Cell.html" title="interface in org.apache.hadoop.hbase"><code>Cell</code></a> representing the earliest position the scanner should seek to, or
+ <code>null</code> if this filter cannot provide a better position than the structural hint</dd>
+<dt>Throws:</dt>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></code> - in case an I/O or filter-specific failure needs to be signaled</dd>
+<dt>See Also:</dt>
+<dd>
+<ul class="see-list">
+<li><a href="Filter.html#filterCell(org.apache.hadoop.hbase.Cell)"><code>Filter.filterCell(Cell)</code></a></li>
+<li><a href="Filter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)"><code>Filter.getNextCellHint(Cell)</code></a></li>
+</ul>
+</dd>
+</dl>
+</section>
+</li>
+<li>
<section class="detail" id="equals(java.lang.Object)">
<h3>equals</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithOR.html#line-395">equals</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a> obj)</span></div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithOR.html#line-447">equals</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a> obj)</span></div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a></code> in class <code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></code></dd>
@@ -555,7 +620,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="hashCode()">
<h3>hashCode</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithOR.html#line-408">hashCode</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/FilterListWithOR.html#line-460">hashCode</a></span>()</div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a></code> in class <code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/FilterWrapper.html b/devapidocs/org/apache/hadoop/hbase/filter/FilterWrapper.html
index b82a1353c2a..0cb8dec2aae 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/FilterWrapper.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/FilterWrapper.html
@@ -431,9 +431,13 @@ loadScripts(document, 'script');</script>
must point to a <em>smaller</em> row key (earlier in reverse-scan direction). The scanner
validates hint direction and falls back to <code>nextRow()</code> if the hint does not advance in
the scan direction.</li>
- <li><strong>Composite filter limitation:</strong> <code>FilterList</code>, <code>SkipFilter</code>, and
- <code>WhileMatchFilter</code> do not currently delegate this method to wrapped sub-filters. Hints
- from filters used inside these wrappers will be silently ignored.</li>
+ <li><strong>Composite filter support:</strong> <code>FilterList</code> (both <code>MUST_PASS_ALL</code>
+ and <code>MUST_PASS_ONE</code>), <code>SkipFilter</code>, and <code>WhileMatchFilter</code> delegate this
+ method to their sub-filters and merge the results. For AND (<code>MUST_PASS_ALL</code>), only
+ sub-filters whose <code>filterRowKey</code> individually returned <code>true</code> are consulted, and
+ the farthest (maximal-step) hint among them is returned. For OR (<code>MUST_PASS_ONE</code>), the
+ nearest hint is returned only when every non-terminated sub-filter provides one — any null
+ collapses the OR result to null.</li>
</ul></div>
<dl class="notes">
<dt>Overrides:</dt>
@@ -485,9 +489,11 @@ loadScripts(document, 'script');</script>
<li>For reversed scans, the returned cell must have a <em>smaller</em> row key (i.e., earlier
in reverse-scan direction) than the <code>skippedCell</code>. Hints that do not advance in the scan
direction are silently ignored.</li>
- <li><strong>Composite filter limitation:</strong> <code>FilterList</code>, <code>SkipFilter</code>, and
- <code>WhileMatchFilter</code> do not currently delegate this method to wrapped sub-filters. Hints
- from filters used inside these wrappers will be silently ignored.</li>
+ <li><strong>Composite filter support:</strong> <code>FilterList</code> (both <code>MUST_PASS_ALL</code>
+ and <code>MUST_PASS_ONE</code>), <code>SkipFilter</code>, and <code>WhileMatchFilter</code> delegate this
+ method to their sub-filters and merge the results (maximal step for AND; for OR, the nearest
+ hint is returned only when every non-terminated sub-filter provides one — any null collapses
+ the OR result to null).</li>
</ul></div>
<dl class="notes">
<dt>Overrides:</dt>
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.html b/devapidocs/org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.html
index 198f3f826cf..73c6adf699b 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.html
@@ -193,33 +193,38 @@ implements <a href="HintingFilter.html" title="interface in org.apache.hadoop.hb
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>byte[][]</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getPrefix()" class="member-name-link">getPrefix</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
-<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>int</code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#hashCode()" class="member-name-link">hashCode</a>()</code></div>
-<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
-<div class="col-first even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static <a href="MultipleColumnPrefixFilter.html" title="class in org.apache.hadoop.hbase.filter">MultipleColumnPrefixFilter</a></code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#parseFrom(byte%5B%5D)" class="member-name-link">parseFrom</a><wbr>(byte[] pbBytes)</code></div>
-<div class="col-last even-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Filters that cannot provide a structural-skip seek hint can inherit this no-op implementation.</div>
+</div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>int</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#hashCode()" class="member-name-link">hashCode</a>()</code></div>
+<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code>static <a href="MultipleColumnPrefixFilter.html" title="class in org.apache.hadoop.hbase.filter">MultipleColumnPrefixFilter</a></code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4"><code><a href="#parseFrom(byte%5B%5D)" class="member-name-link">parseFrom</a><wbr>(byte[] pbBytes)</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab1 method-summary-table-tab4">
<div class="block">Parse a serialized representation of <a href="MultipleColumnPrefixFilter.html" title="class in org.apache.hadoop.hbase.filter"><code>MultipleColumnPrefixFilter</code></a></div>
</div>
-<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>byte[]</code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toByteArray()" class="member-name-link">toByteArray</a>()</code></div>
-<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>byte[]</code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toByteArray()" class="member-name-link">toByteArray</a>()</code></div>
+<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Returns The filter serialized using pb</div>
</div>
-<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
-<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toString()" class="member-name-link">toString</a>()</code></div>
-<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toString()" class="member-name-link">toString</a>()</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Return filter's info for debugging and logging purpose.</div>
</div>
-<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>protected <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
-<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toString(int)" class="member-name-link">toString</a><wbr>(int maxPrefixes)</code></div>
-<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>protected <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toString(int)" class="member-name-link">toString</a><wbr>(int maxPrefixes)</code></div>
+<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
</div>
</div>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-org.apache.hadoop.hbase.filter.FilterBase">Methods inherited from class org.apache.hadoop.hbase.filter.<a href="FilterBase.html" title="class in org.apache.hadoop.hbase.filter">FilterBase</a></h3>
-<code><a href="FilterBase.html#filterAllRemaining()">filterAllRemaining</a>, <a href="FilterBase.html#filterRow()">filterRow</a>, <a href="FilterBase.html#filterRowCells(java.util.List)">filterRowCells</a>, <a href="FilterBase.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)">getHintForRejectedRow</a>, <a href="FilterBase.html#getSkipHint(org.apache.hadoop.hbase.Cell)">getSkipHint</a>, <a href="FilterBase.html#hasFilterRow()">hasFilterRow</a>, <a href="FilterBase.html#isFamilyEss [...]
+<code><a href="FilterBase.html#filterAllRemaining()">filterAllRemaining</a>, <a href="FilterBase.html#filterRow()">filterRow</a>, <a href="FilterBase.html#filterRowCells(java.util.List)">filterRowCells</a>, <a href="FilterBase.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)">getHintForRejectedRow</a>, <a href="FilterBase.html#hasFilterRow()">hasFilterRow</a>, <a href="FilterBase.html#isFamilyEssential(byte%5B%5D)">isFamilyEssential</a>, <a href="FilterBase.html#reset()">reset</a [...]
<div class="inherited-list">
<h3 id="methods-inherited-from-class-org.apache.hadoop.hbase.filter.Filter">Methods inherited from class org.apache.hadoop.hbase.filter.<a href="Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a></h3>
<code><a href="Filter.html#isReversed()">isReversed</a>, <a href="Filter.html#setReversed(boolean)">setReversed</a></code></div>
@@ -433,15 +438,74 @@ implements <a href="HintingFilter.html" title="interface in org.apache.hadoop.hb
</section>
</li>
<li>
+<section class="detail" id="getSkipHint(org.apache.hadoop.hbase.Cell)">
+<h3>getSkipHint</h3>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.html#line-176">getSkipHint</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</span>
+ throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
+<div class="block"><span class="descfrm-type-label">Description copied from class: <code><a href="FilterBase.html#getSkipHint(org.apache.hadoop.hbase.Cell)">FilterBase</a></code></span></div>
+<div class="block">Filters that cannot provide a structural-skip seek hint can inherit this no-op implementation.
+ Subclasses with purely configuration-driven, stateless hint computation (e.g. a fixed column
+ range or fuzzy-row pattern) may override this to avoid cell-by-cell advancement when the
+ time-range, column, or version gate fires. Provides a seek hint for cells that are structurally skipped by the scan pipeline
+ <em>before</em> <a href="Filter.html#filterCell(org.apache.hadoop.hbase.Cell)"><code>Filter.filterCell(Cell)</code></a> is ever reached. The pipeline short-circuits on
+ several criteria — time-range mismatch, column-set exclusion, and version-limit exhaustion —
+ and in each case the filter is bypassed entirely. When an implementation can compute a
+ meaningful forward position purely from the cell's coordinates (without needing the
+ <code>filterCell</code> call sequence), it should return that position here so the scanner can seek
+ ahead instead of advancing one cell at a time.
+ <p>
+ Contract:
+ <ul>
+ <li>May be called for cells that have <strong>never</strong> been passed to
+ <a href="Filter.html#filterCell(org.apache.hadoop.hbase.Cell)"><code>Filter.filterCell(Cell)</code></a>.</li>
+ <li>Implementations <strong>must not</strong> modify any filter state; this method is treated
+ as logically stateless. Only filters whose hint computation is based solely on immutable
+ configuration (e.g. a fixed column range or a fuzzy-row pattern) should override this.</li>
+ <li>The returned <a href="../Cell.html" title="interface in org.apache.hadoop.hbase"><code>Cell</code></a>, if non-null, must be an
+ <a href="../ExtendedCell.html" title="interface in org.apache.hadoop.hbase"><code>ExtendedCell</code></a> because filters are evaluated on the server
+ side.</li>
+ <li>Returning <code>null</code> (the default) falls through to the existing structural skip/seek
+ behaviour, preserving full backward compatibility.</li>
+ <li>For reversed scans, the returned cell must have a <em>smaller</em> row key (i.e., earlier
+ in reverse-scan direction) than the <code>skippedCell</code>. Hints that do not advance in the scan
+ direction are silently ignored.</li>
+ <li><strong>Composite filter support:</strong> <code>FilterList</code> (both <code>MUST_PASS_ALL</code>
+ and <code>MUST_PASS_ONE</code>), <code>SkipFilter</code>, and <code>WhileMatchFilter</code> delegate this
+ method to their sub-filters and merge the results (maximal step for AND; for OR, the nearest
+ hint is returned only when every non-terminated sub-filter provides one — any null collapses
+ the OR result to null).</li>
+ </ul></div>
+<dl class="notes">
+<dt>Overrides:</dt>
+<dd><code><a href="FilterBase.html#getSkipHint(org.apache.hadoop.hbase.Cell)">getSkipHint</a></code> in class <code><a href="FilterBase.html" title="class in org.apache.hadoop.hbase.filter">FilterBase</a></code></dd>
+<dt>Parameters:</dt>
+<dd><code>skippedCell</code> - the cell that was rejected by the time-range, column, or version gate before
+ <code>filterCell</code> could be consulted</dd>
+<dt>Returns:</dt>
+<dd>a <a href="../Cell.html" title="interface in org.apache.hadoop.hbase"><code>Cell</code></a> representing the earliest position the scanner should seek to, or
+ <code>null</code> if this filter cannot provide a better position than the structural hint</dd>
+<dt>Throws:</dt>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></code> - in case an I/O or filter-specific failure needs to be signaled</dd>
+<dt>See Also:</dt>
+<dd>
+<ul class="see-list">
+<li><a href="Filter.html#filterCell(org.apache.hadoop.hbase.Cell)"><code>Filter.filterCell(Cell)</code></a></li>
+<li><a href="Filter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)"><code>Filter.getNextCellHint(Cell)</code></a></li>
+</ul>
+</dd>
+</dl>
+</section>
+</li>
+<li>
<section class="detail" id="createTreeSet()">
<h3>createTreeSet</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/TreeSet.html" title="class or interface in java.util" class="external-link">TreeSet</a><byte[]></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.html#line-176">createTreeSet</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/TreeSet.html" title="class or interface in java.util" class="external-link">TreeSet</a><byte[]></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.html#line-199">createTreeSet</a></span>()</div>
</section>
</li>
<li>
<section class="detail" id="toString()">
<h3>toString</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.html#line-189">toString</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.html#line-212">toString</a></span>()</div>
<div class="block"><span class="descfrm-type-label">Description copied from class: <code><a href="FilterBase.html#toString()">FilterBase</a></code></span></div>
<div class="block">Return filter's info for debugging and logging purpose.</div>
<dl class="notes">
@@ -453,13 +517,13 @@ implements <a href="HintingFilter.html" title="interface in org.apache.hadoop.hb
<li>
<section class="detail" id="toString(int)">
<h3>toString</h3>
-<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.html#line-194">toString</a></span><wbr><span class="parameters">(int maxPrefixes)</span></div>
+<div class="member-signature"><span class="modifiers">protected</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.html#line-217">toString</a></span><wbr><span class="parameters">(int maxPrefixes)</span></div>
</section>
</li>
<li>
<section class="detail" id="equals(java.lang.Object)">
<h3>equals</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.html#line-213">equals</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a> obj)</span></div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.html#line-236">equals</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a> obj)</span></div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a></code> in class <code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></code></dd>
@@ -469,7 +533,7 @@ implements <a href="HintingFilter.html" title="interface in org.apache.hadoop.hb
<li>
<section class="detail" id="hashCode()">
<h3>hashCode</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.html#line-218">hashCode</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.html#line-241">hashCode</a></span>()</div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a></code> in class <code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/SkipFilter.html b/devapidocs/org/apache/hadoop/hbase/filter/SkipFilter.html
index c26aeefc688..c0a5a1ddd5a 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/SkipFilter.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/SkipFilter.html
@@ -187,6 +187,17 @@ loadScripts(document, 'script');</script>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getFilter()" class="member-name-link">getFilter</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)" class="member-name-link">getHintForRejectedRow</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstRowCell)</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Filters that cannot provide a seek hint after row-key rejection can inherit this no-op
+ implementation.</div>
+</div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
+<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Filters that cannot provide a structural-skip seek hint can inherit this no-op implementation.</div>
+</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>boolean</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#hasFilterRow()" class="member-name-link">hasFilterRow</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
@@ -232,7 +243,7 @@ loadScripts(document, 'script');</script>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-org.apache.hadoop.hbase.filter.FilterBase">Methods inherited from class org.apache.hadoop.hbase.filter.<a href="FilterBase.html" title="class in org.apache.hadoop.hbase.filter">FilterBase</a></h3>
-<code><a href="FilterBase.html#createFilterFromArguments(java.util.ArrayList)">createFilterFromArguments</a>, <a href="FilterBase.html#filterAllRemaining()">filterAllRemaining</a>, <a href="FilterBase.html#filterRowCells(java.util.List)">filterRowCells</a>, <a href="FilterBase.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)">getHintForRejectedRow</a>, <a href="FilterBase.html#getNextCellHint(org.apache.hadoop.hbase.Cell)">getNextCellHint</a>, <a href="FilterBase.html#getSkipHint [...]
+<code><a href="FilterBase.html#createFilterFromArguments(java.util.ArrayList)">createFilterFromArguments</a>, <a href="FilterBase.html#filterAllRemaining()">filterAllRemaining</a>, <a href="FilterBase.html#filterRowCells(java.util.List)">filterRowCells</a>, <a href="FilterBase.html#getNextCellHint(org.apache.hadoop.hbase.Cell)">getNextCellHint</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-org.apache.hadoop.hbase.filter.Filter">Methods inherited from class org.apache.hadoop.hbase.filter.<a href="Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a></h3>
<code><a href="Filter.html#isReversed()">isReversed</a>, <a href="Filter.html#setReversed(boolean)">setReversed</a></code></div>
@@ -490,9 +501,128 @@ loadScripts(document, 'script');</script>
</section>
</li>
<li>
+<section class="detail" id="getHintForRejectedRow(org.apache.hadoop.hbase.Cell)">
+<h3>getHintForRejectedRow</h3>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/SkipFilter.html#line-144">getHintForRejectedRow</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstRowCell)</span>
+ throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
+<div class="block"><span class="descfrm-type-label">Description copied from class: <code><a href="FilterBase.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)">FilterBase</a></code></span></div>
+<div class="block">Filters that cannot provide a seek hint after row-key rejection can inherit this no-op
+ implementation. Subclasses whose row-key logic (e.g. a range pointer advanced inside
+ <a href="FilterBase.html#filterRowKey(org.apache.hadoop.hbase.Cell)"><code>FilterBase.filterRowKey(Cell)</code></a>) makes a better seek target available should override this.
+ Provides a seek hint to bypass row-by-row scanning after <a href="Filter.html#filterRowKey(org.apache.hadoop.hbase.Cell)"><code>Filter.filterRowKey(Cell)</code></a> rejects a
+ row. When <code>filterRowKey</code> returns <code>true</code> the scan pipeline would normally iterate
+ through every remaining cell in the rejected row one-by-one (via <code>nextRow()</code>) before
+ moving on. If the filter can determine a better forward position — for example, the next range
+ boundary in a <code>MultiRowRangeFilter</code> — it should return that target cell here, allowing
+ the scanner to seek directly past the unwanted rows.
+ <p>
+ Contract:
+ <ul>
+ <li>Only called after <a href="Filter.html#filterRowKey(org.apache.hadoop.hbase.Cell)"><code>Filter.filterRowKey(Cell)</code></a> has returned <code>true</code> for the same
+ <code>firstRowCell</code>.</li>
+ <li>Implementations may use state that was set during <a href="Filter.html#filterRowKey(org.apache.hadoop.hbase.Cell)"><code>Filter.filterRowKey(Cell)</code></a> (e.g. an
+ updated range pointer), but <strong>must not</strong> invoke <a href="Filter.html#filterCell(org.apache.hadoop.hbase.Cell)"><code>Filter.filterCell(Cell)</code></a> logic —
+ the caller guarantees that <code>filterCell</code> has not been called for this row.</li>
+ <li>The returned <a href="../Cell.html" title="interface in org.apache.hadoop.hbase"><code>Cell</code></a>, if non-null, must be an
+ <a href="../ExtendedCell.html" title="interface in org.apache.hadoop.hbase"><code>ExtendedCell</code></a> because filters are evaluated on the server
+ side.</li>
+ <li>Returning <code>null</code> (the default) falls through to the existing <code>nextRow()</code>
+ behaviour, preserving full backward compatibility.</li>
+ <li>For reversed scans (<a href="../client/Scan.html#isReversed()"><code>Scan.isReversed()</code></a>), the hint
+ must point to a <em>smaller</em> row key (earlier in reverse-scan direction). The scanner
+ validates hint direction and falls back to <code>nextRow()</code> if the hint does not advance in
+ the scan direction.</li>
+ <li><strong>Composite filter support:</strong> <code>FilterList</code> (both <code>MUST_PASS_ALL</code>
+ and <code>MUST_PASS_ONE</code>), <code>SkipFilter</code>, and <code>WhileMatchFilter</code> delegate this
+ method to their sub-filters and merge the results. For AND (<code>MUST_PASS_ALL</code>), only
+ sub-filters whose <code>filterRowKey</code> individually returned <code>true</code> are consulted, and
+ the farthest (maximal-step) hint among them is returned. For OR (<code>MUST_PASS_ONE</code>), the
+ nearest hint is returned only when every non-terminated sub-filter provides one — any null
+ collapses the OR result to null.</li>
+ </ul></div>
+<dl class="notes">
+<dt>Overrides:</dt>
+<dd><code><a href="FilterBase.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)">getHintForRejectedRow</a></code> in class <code><a href="FilterBase.html" title="class in org.apache.hadoop.hbase.filter">FilterBase</a></code></dd>
+<dt>Parameters:</dt>
+<dd><code>firstRowCell</code> - the first cell encountered in the rejected row; contains the row key that
+ was passed to <code>filterRowKey</code></dd>
+<dt>Returns:</dt>
+<dd>a <a href="../Cell.html" title="interface in org.apache.hadoop.hbase"><code>Cell</code></a> representing the earliest position the scanner should seek to, or
+ <code>null</code> if this filter cannot provide a better position than a sequential skip</dd>
+<dt>Throws:</dt>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></code> - in case an I/O or filter-specific failure needs to be signaled</dd>
+<dt>See Also:</dt>
+<dd>
+<ul class="see-list">
+<li><a href="Filter.html#filterRowKey(org.apache.hadoop.hbase.Cell)"><code>Filter.filterRowKey(Cell)</code></a></li>
+</ul>
+</dd>
+</dl>
+</section>
+</li>
+<li>
+<section class="detail" id="getSkipHint(org.apache.hadoop.hbase.Cell)">
+<h3>getSkipHint</h3>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/SkipFilter.html#line-149">getSkipHint</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</span>
+ throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
+<div class="block"><span class="descfrm-type-label">Description copied from class: <code><a href="FilterBase.html#getSkipHint(org.apache.hadoop.hbase.Cell)">FilterBase</a></code></span></div>
+<div class="block">Filters that cannot provide a structural-skip seek hint can inherit this no-op implementation.
+ Subclasses with purely configuration-driven, stateless hint computation (e.g. a fixed column
+ range or fuzzy-row pattern) may override this to avoid cell-by-cell advancement when the
+ time-range, column, or version gate fires. Provides a seek hint for cells that are structurally skipped by the scan pipeline
+ <em>before</em> <a href="Filter.html#filterCell(org.apache.hadoop.hbase.Cell)"><code>Filter.filterCell(Cell)</code></a> is ever reached. The pipeline short-circuits on
+ several criteria — time-range mismatch, column-set exclusion, and version-limit exhaustion —
+ and in each case the filter is bypassed entirely. When an implementation can compute a
+ meaningful forward position purely from the cell's coordinates (without needing the
+ <code>filterCell</code> call sequence), it should return that position here so the scanner can seek
+ ahead instead of advancing one cell at a time.
+ <p>
+ Contract:
+ <ul>
+ <li>May be called for cells that have <strong>never</strong> been passed to
+ <a href="Filter.html#filterCell(org.apache.hadoop.hbase.Cell)"><code>Filter.filterCell(Cell)</code></a>.</li>
+ <li>Implementations <strong>must not</strong> modify any filter state; this method is treated
+ as logically stateless. Only filters whose hint computation is based solely on immutable
+ configuration (e.g. a fixed column range or a fuzzy-row pattern) should override this.</li>
+ <li>The returned <a href="../Cell.html" title="interface in org.apache.hadoop.hbase"><code>Cell</code></a>, if non-null, must be an
+ <a href="../ExtendedCell.html" title="interface in org.apache.hadoop.hbase"><code>ExtendedCell</code></a> because filters are evaluated on the server
+ side.</li>
+ <li>Returning <code>null</code> (the default) falls through to the existing structural skip/seek
+ behaviour, preserving full backward compatibility.</li>
+ <li>For reversed scans, the returned cell must have a <em>smaller</em> row key (i.e., earlier
+ in reverse-scan direction) than the <code>skippedCell</code>. Hints that do not advance in the scan
+ direction are silently ignored.</li>
+ <li><strong>Composite filter support:</strong> <code>FilterList</code> (both <code>MUST_PASS_ALL</code>
+ and <code>MUST_PASS_ONE</code>), <code>SkipFilter</code>, and <code>WhileMatchFilter</code> delegate this
+ method to their sub-filters and merge the results (maximal step for AND; for OR, the nearest
+ hint is returned only when every non-terminated sub-filter provides one — any null collapses
+ the OR result to null).</li>
+ </ul></div>
+<dl class="notes">
+<dt>Overrides:</dt>
+<dd><code><a href="FilterBase.html#getSkipHint(org.apache.hadoop.hbase.Cell)">getSkipHint</a></code> in class <code><a href="FilterBase.html" title="class in org.apache.hadoop.hbase.filter">FilterBase</a></code></dd>
+<dt>Parameters:</dt>
+<dd><code>skippedCell</code> - the cell that was rejected by the time-range, column, or version gate before
+ <code>filterCell</code> could be consulted</dd>
+<dt>Returns:</dt>
+<dd>a <a href="../Cell.html" title="interface in org.apache.hadoop.hbase"><code>Cell</code></a> representing the earliest position the scanner should seek to, or
+ <code>null</code> if this filter cannot provide a better position than the structural hint</dd>
+<dt>Throws:</dt>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></code> - in case an I/O or filter-specific failure needs to be signaled</dd>
+<dt>See Also:</dt>
+<dd>
+<ul class="see-list">
+<li><a href="Filter.html#filterCell(org.apache.hadoop.hbase.Cell)"><code>Filter.filterCell(Cell)</code></a></li>
+<li><a href="Filter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)"><code>Filter.getNextCellHint(Cell)</code></a></li>
+</ul>
+</dd>
+</dl>
+</section>
+</li>
+<li>
<section class="detail" id="isFamilyEssential(byte[])">
<h3>isFamilyEssential</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/SkipFilter.html#line-144">isFamilyEssential</a></span><wbr><span class="parameters">(byte[] name)</span>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/SkipFilter.html#line-154">isFamilyEssential</a></span><wbr><span class="parameters">(byte[] name)</span>
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
<div class="block"><span class="descfrm-type-label">Description copied from class: <code><a href="FilterBase.html#isFamilyEssential(byte%5B%5D)">FilterBase</a></code></span></div>
<div class="block">By default, we require all scan's column families to be present. Our subclasses may be more
@@ -512,7 +642,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="toString()">
<h3>toString</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/SkipFilter.html#line-149">toString</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/SkipFilter.html#line-159">toString</a></span>()</div>
<div class="block"><span class="descfrm-type-label">Description copied from class: <code><a href="FilterBase.html#toString()">FilterBase</a></code></span></div>
<div class="block">Return filter's info for debugging and logging purpose.</div>
<dl class="notes">
@@ -524,7 +654,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="equals(java.lang.Object)">
<h3>equals</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/SkipFilter.html#line-154">equals</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a> obj)</span></div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/SkipFilter.html#line-164">equals</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a> obj)</span></div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a></code> in class <code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></code></dd>
@@ -534,7 +664,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="hashCode()">
<h3>hashCode</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/SkipFilter.html#line-159">hashCode</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/SkipFilter.html#line-169">hashCode</a></span>()</div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a></code> in class <code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/WhileMatchFilter.html b/devapidocs/org/apache/hadoop/hbase/filter/WhileMatchFilter.html
index b05ddd1674b..5fa210ecf35 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/WhileMatchFilter.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/WhileMatchFilter.html
@@ -183,6 +183,17 @@ loadScripts(document, 'script');</script>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getFilter()" class="member-name-link">getFilter</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"> </div>
+<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)" class="member-name-link">getHintForRejectedRow</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstRowCell)</code></div>
+<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Filters that cannot provide a seek hint after row-key rejection can inherit this no-op
+ implementation.</div>
+</div>
+<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></code></div>
+<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getSkipHint(org.apache.hadoop.hbase.Cell)" class="member-name-link">getSkipHint</a><wbr>(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</code></div>
+<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
+<div class="block">Filters that cannot provide a structural-skip seek hint can inherit this no-op implementation.</div>
+</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>boolean</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#hasFilterRow()" class="member-name-link">hasFilterRow</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
@@ -228,7 +239,7 @@ loadScripts(document, 'script');</script>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-org.apache.hadoop.hbase.filter.FilterBase">Methods inherited from class org.apache.hadoop.hbase.filter.<a href="FilterBase.html" title="class in org.apache.hadoop.hbase.filter">FilterBase</a></h3>
-<code><a href="FilterBase.html#createFilterFromArguments(java.util.ArrayList)">createFilterFromArguments</a>, <a href="FilterBase.html#filterRowCells(java.util.List)">filterRowCells</a>, <a href="FilterBase.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)">getHintForRejectedRow</a>, <a href="FilterBase.html#getNextCellHint(org.apache.hadoop.hbase.Cell)">getNextCellHint</a>, <a href="FilterBase.html#getSkipHint(org.apache.hadoop.hbase.Cell)">getSkipHint</a></code></div>
+<code><a href="FilterBase.html#createFilterFromArguments(java.util.ArrayList)">createFilterFromArguments</a>, <a href="FilterBase.html#filterRowCells(java.util.List)">filterRowCells</a>, <a href="FilterBase.html#getNextCellHint(org.apache.hadoop.hbase.Cell)">getNextCellHint</a></code></div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-org.apache.hadoop.hbase.filter.Filter">Methods inherited from class org.apache.hadoop.hbase.filter.<a href="Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a></h3>
<code><a href="Filter.html#isReversed()">isReversed</a>, <a href="Filter.html#setReversed(boolean)">setReversed</a></code></div>
@@ -508,9 +519,128 @@ loadScripts(document, 'script');</script>
</section>
</li>
<li>
+<section class="detail" id="getHintForRejectedRow(org.apache.hadoop.hbase.Cell)">
+<h3>getHintForRejectedRow</h3>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/WhileMatchFilter.html#line-142">getHintForRejectedRow</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> firstRowCell)</span>
+ throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
+<div class="block"><span class="descfrm-type-label">Description copied from class: <code><a href="FilterBase.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)">FilterBase</a></code></span></div>
+<div class="block">Filters that cannot provide a seek hint after row-key rejection can inherit this no-op
+ implementation. Subclasses whose row-key logic (e.g. a range pointer advanced inside
+ <a href="FilterBase.html#filterRowKey(org.apache.hadoop.hbase.Cell)"><code>FilterBase.filterRowKey(Cell)</code></a>) makes a better seek target available should override this.
+ Provides a seek hint to bypass row-by-row scanning after <a href="Filter.html#filterRowKey(org.apache.hadoop.hbase.Cell)"><code>Filter.filterRowKey(Cell)</code></a> rejects a
+ row. When <code>filterRowKey</code> returns <code>true</code> the scan pipeline would normally iterate
+ through every remaining cell in the rejected row one-by-one (via <code>nextRow()</code>) before
+ moving on. If the filter can determine a better forward position — for example, the next range
+ boundary in a <code>MultiRowRangeFilter</code> — it should return that target cell here, allowing
+ the scanner to seek directly past the unwanted rows.
+ <p>
+ Contract:
+ <ul>
+ <li>Only called after <a href="Filter.html#filterRowKey(org.apache.hadoop.hbase.Cell)"><code>Filter.filterRowKey(Cell)</code></a> has returned <code>true</code> for the same
+ <code>firstRowCell</code>.</li>
+ <li>Implementations may use state that was set during <a href="Filter.html#filterRowKey(org.apache.hadoop.hbase.Cell)"><code>Filter.filterRowKey(Cell)</code></a> (e.g. an
+ updated range pointer), but <strong>must not</strong> invoke <a href="Filter.html#filterCell(org.apache.hadoop.hbase.Cell)"><code>Filter.filterCell(Cell)</code></a> logic —
+ the caller guarantees that <code>filterCell</code> has not been called for this row.</li>
+ <li>The returned <a href="../Cell.html" title="interface in org.apache.hadoop.hbase"><code>Cell</code></a>, if non-null, must be an
+ <a href="../ExtendedCell.html" title="interface in org.apache.hadoop.hbase"><code>ExtendedCell</code></a> because filters are evaluated on the server
+ side.</li>
+ <li>Returning <code>null</code> (the default) falls through to the existing <code>nextRow()</code>
+ behaviour, preserving full backward compatibility.</li>
+ <li>For reversed scans (<a href="../client/Scan.html#isReversed()"><code>Scan.isReversed()</code></a>), the hint
+ must point to a <em>smaller</em> row key (earlier in reverse-scan direction). The scanner
+ validates hint direction and falls back to <code>nextRow()</code> if the hint does not advance in
+ the scan direction.</li>
+ <li><strong>Composite filter support:</strong> <code>FilterList</code> (both <code>MUST_PASS_ALL</code>
+ and <code>MUST_PASS_ONE</code>), <code>SkipFilter</code>, and <code>WhileMatchFilter</code> delegate this
+ method to their sub-filters and merge the results. For AND (<code>MUST_PASS_ALL</code>), only
+ sub-filters whose <code>filterRowKey</code> individually returned <code>true</code> are consulted, and
+ the farthest (maximal-step) hint among them is returned. For OR (<code>MUST_PASS_ONE</code>), the
+ nearest hint is returned only when every non-terminated sub-filter provides one — any null
+ collapses the OR result to null.</li>
+ </ul></div>
+<dl class="notes">
+<dt>Overrides:</dt>
+<dd><code><a href="FilterBase.html#getHintForRejectedRow(org.apache.hadoop.hbase.Cell)">getHintForRejectedRow</a></code> in class <code><a href="FilterBase.html" title="class in org.apache.hadoop.hbase.filter">FilterBase</a></code></dd>
+<dt>Parameters:</dt>
+<dd><code>firstRowCell</code> - the first cell encountered in the rejected row; contains the row key that
+ was passed to <code>filterRowKey</code></dd>
+<dt>Returns:</dt>
+<dd>a <a href="../Cell.html" title="interface in org.apache.hadoop.hbase"><code>Cell</code></a> representing the earliest position the scanner should seek to, or
+ <code>null</code> if this filter cannot provide a better position than a sequential skip</dd>
+<dt>Throws:</dt>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></code> - in case an I/O or filter-specific failure needs to be signaled</dd>
+<dt>See Also:</dt>
+<dd>
+<ul class="see-list">
+<li><a href="Filter.html#filterRowKey(org.apache.hadoop.hbase.Cell)"><code>Filter.filterRowKey(Cell)</code></a></li>
+</ul>
+</dd>
+</dl>
+</section>
+</li>
+<li>
+<section class="detail" id="getSkipHint(org.apache.hadoop.hbase.Cell)">
+<h3>getSkipHint</h3>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/WhileMatchFilter.html#line-147">getSkipHint</a></span><wbr><span class="parameters">(<a href="../Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> skippedCell)</span>
+ throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
+<div class="block"><span class="descfrm-type-label">Description copied from class: <code><a href="FilterBase.html#getSkipHint(org.apache.hadoop.hbase.Cell)">FilterBase</a></code></span></div>
+<div class="block">Filters that cannot provide a structural-skip seek hint can inherit this no-op implementation.
+ Subclasses with purely configuration-driven, stateless hint computation (e.g. a fixed column
+ range or fuzzy-row pattern) may override this to avoid cell-by-cell advancement when the
+ time-range, column, or version gate fires. Provides a seek hint for cells that are structurally skipped by the scan pipeline
+ <em>before</em> <a href="Filter.html#filterCell(org.apache.hadoop.hbase.Cell)"><code>Filter.filterCell(Cell)</code></a> is ever reached. The pipeline short-circuits on
+ several criteria — time-range mismatch, column-set exclusion, and version-limit exhaustion —
+ and in each case the filter is bypassed entirely. When an implementation can compute a
+ meaningful forward position purely from the cell's coordinates (without needing the
+ <code>filterCell</code> call sequence), it should return that position here so the scanner can seek
+ ahead instead of advancing one cell at a time.
+ <p>
+ Contract:
+ <ul>
+ <li>May be called for cells that have <strong>never</strong> been passed to
+ <a href="Filter.html#filterCell(org.apache.hadoop.hbase.Cell)"><code>Filter.filterCell(Cell)</code></a>.</li>
+ <li>Implementations <strong>must not</strong> modify any filter state; this method is treated
+ as logically stateless. Only filters whose hint computation is based solely on immutable
+ configuration (e.g. a fixed column range or a fuzzy-row pattern) should override this.</li>
+ <li>The returned <a href="../Cell.html" title="interface in org.apache.hadoop.hbase"><code>Cell</code></a>, if non-null, must be an
+ <a href="../ExtendedCell.html" title="interface in org.apache.hadoop.hbase"><code>ExtendedCell</code></a> because filters are evaluated on the server
+ side.</li>
+ <li>Returning <code>null</code> (the default) falls through to the existing structural skip/seek
+ behaviour, preserving full backward compatibility.</li>
+ <li>For reversed scans, the returned cell must have a <em>smaller</em> row key (i.e., earlier
+ in reverse-scan direction) than the <code>skippedCell</code>. Hints that do not advance in the scan
+ direction are silently ignored.</li>
+ <li><strong>Composite filter support:</strong> <code>FilterList</code> (both <code>MUST_PASS_ALL</code>
+ and <code>MUST_PASS_ONE</code>), <code>SkipFilter</code>, and <code>WhileMatchFilter</code> delegate this
+ method to their sub-filters and merge the results (maximal step for AND; for OR, the nearest
+ hint is returned only when every non-terminated sub-filter provides one — any null collapses
+ the OR result to null).</li>
+ </ul></div>
+<dl class="notes">
+<dt>Overrides:</dt>
+<dd><code><a href="FilterBase.html#getSkipHint(org.apache.hadoop.hbase.Cell)">getSkipHint</a></code> in class <code><a href="FilterBase.html" title="class in org.apache.hadoop.hbase.filter">FilterBase</a></code></dd>
+<dt>Parameters:</dt>
+<dd><code>skippedCell</code> - the cell that was rejected by the time-range, column, or version gate before
+ <code>filterCell</code> could be consulted</dd>
+<dt>Returns:</dt>
+<dd>a <a href="../Cell.html" title="interface in org.apache.hadoop.hbase"><code>Cell</code></a> representing the earliest position the scanner should seek to, or
+ <code>null</code> if this filter cannot provide a better position than the structural hint</dd>
+<dt>Throws:</dt>
+<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></code> - in case an I/O or filter-specific failure needs to be signaled</dd>
+<dt>See Also:</dt>
+<dd>
+<ul class="see-list">
+<li><a href="Filter.html#filterCell(org.apache.hadoop.hbase.Cell)"><code>Filter.filterCell(Cell)</code></a></li>
+<li><a href="Filter.html#getNextCellHint(org.apache.hadoop.hbase.Cell)"><code>Filter.getNextCellHint(Cell)</code></a></li>
+</ul>
+</dd>
+</dl>
+</section>
+</li>
+<li>
<section class="detail" id="isFamilyEssential(byte[])">
<h3>isFamilyEssential</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/WhileMatchFilter.html#line-142">isFamilyEssential</a></span><wbr><span class="parameters">(byte[] name)</span>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/WhileMatchFilter.html#line-152">isFamilyEssential</a></span><wbr><span class="parameters">(byte[] name)</span>
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
<div class="block"><span class="descfrm-type-label">Description copied from class: <code><a href="FilterBase.html#isFamilyEssential(byte%5B%5D)">FilterBase</a></code></span></div>
<div class="block">By default, we require all scan's column families to be present. Our subclasses may be more
@@ -530,7 +660,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="toString()">
<h3>toString</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/WhileMatchFilter.html#line-147">toString</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/WhileMatchFilter.html#line-157">toString</a></span>()</div>
<div class="block"><span class="descfrm-type-label">Description copied from class: <code><a href="FilterBase.html#toString()">FilterBase</a></code></span></div>
<div class="block">Return filter's info for debugging and logging purpose.</div>
<dl class="notes">
@@ -542,7 +672,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="equals(java.lang.Object)">
<h3>equals</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/WhileMatchFilter.html#line-152">equals</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a> obj)</span></div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">boolean</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/WhileMatchFilter.html#line-162">equals</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a> obj)</span></div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a></code> in class <code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></code></dd>
@@ -552,7 +682,7 @@ loadScripts(document, 'script');</script>
<li>
<section class="detail" id="hashCode()">
<h3>hashCode</h3>
-<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/WhileMatchFilter.html#line-157">hashCode</a></span>()</div>
+<div class="member-signature"><span class="modifiers">public</span> <span class="return-type">int</span> <span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/filter/WhileMatchFilter.html#line-167">hashCode</a></span>()</div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a></code> in class <code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></code></dd>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/filter/ColumnPrefixFilter.html b/devapidocs/src-html/org/apache/hadoop/hbase/filter/ColumnPrefixFilter.html
index e23e4d9d48e..09d92770cbc 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/filter/ColumnPrefixFilter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/filter/ColumnPrefixFilter.html
@@ -162,20 +162,28 @@
<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"> @Override</span>
-<span class="source-line-no">152</span><span id="line-152"> public String toString() {</span>
-<span class="source-line-no">153</span><span id="line-153"> return this.getClass().getSimpleName() + " " + Bytes.toStringBinary(this.prefix);</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"> @Override</span>
-<span class="source-line-no">157</span><span id="line-157"> public boolean equals(Object obj) {</span>
-<span class="source-line-no">158</span><span id="line-158"> return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);</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"> @Override</span>
-<span class="source-line-no">162</span><span id="line-162"> public int hashCode() {</span>
-<span class="source-line-no">163</span><span id="line-163"> return Bytes.hashCode(this.getPrefix());</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">152</span><span id="line-152"> public Cell getSkipHint(Cell skippedCell) throws IOException {</span>
+<span class="source-line-no">153</span><span id="line-153"> if (this.prefix == null) {</span>
+<span class="source-line-no">154</span><span id="line-154"> return null;</span>
+<span class="source-line-no">155</span><span id="line-155"> }</span>
+<span class="source-line-no">156</span><span id="line-156"> return getNextCellHint(skippedCell);</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"> @Override</span>
+<span class="source-line-no">160</span><span id="line-160"> public String toString() {</span>
+<span class="source-line-no">161</span><span id="line-161"> return this.getClass().getSimpleName() + " " + Bytes.toStringBinary(this.prefix);</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"> @Override</span>
+<span class="source-line-no">165</span><span id="line-165"> public boolean equals(Object obj) {</span>
+<span class="source-line-no">166</span><span id="line-166"> return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);</span>
+<span class="source-line-no">167</span><span id="line-167"> }</span>
+<span class="source-line-no">168</span><span id="line-168"></span>
+<span class="source-line-no">169</span><span id="line-169"> @Override</span>
+<span class="source-line-no">170</span><span id="line-170"> public int hashCode() {</span>
+<span class="source-line-no">171</span><span id="line-171"> return Bytes.hashCode(this.getPrefix());</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>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/filter/ColumnRangeFilter.html b/devapidocs/src-html/org/apache/hadoop/hbase/filter/ColumnRangeFilter.html
index 5c4892d91f3..ad3a0ca9cfc 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/filter/ColumnRangeFilter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/filter/ColumnRangeFilter.html
@@ -214,23 +214,31 @@
<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"> @Override</span>
-<span class="source-line-no">204</span><span id="line-204"> public String toString() {</span>
-<span class="source-line-no">205</span><span id="line-205"> return this.getClass().getSimpleName() + " " + (this.minColumnInclusive ? "[" : "(")</span>
-<span class="source-line-no">206</span><span id="line-206"> + Bytes.toStringBinary(this.minColumn) + ", " + Bytes.toStringBinary(this.maxColumn)</span>
-<span class="source-line-no">207</span><span id="line-207"> + (this.maxColumnInclusive ? "]" : ")");</span>
-<span class="source-line-no">208</span><span id="line-208"> }</span>
-<span class="source-line-no">209</span><span id="line-209"></span>
-<span class="source-line-no">210</span><span id="line-210"> @Override</span>
-<span class="source-line-no">211</span><span id="line-211"> public boolean equals(Object obj) {</span>
-<span class="source-line-no">212</span><span id="line-212"> return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);</span>
-<span class="source-line-no">213</span><span id="line-213"> }</span>
-<span class="source-line-no">214</span><span id="line-214"></span>
-<span class="source-line-no">215</span><span id="line-215"> @Override</span>
-<span class="source-line-no">216</span><span id="line-216"> public int hashCode() {</span>
-<span class="source-line-no">217</span><span id="line-217"> return Objects.hash(Bytes.hashCode(getMinColumn()), getMinColumnInclusive(),</span>
-<span class="source-line-no">218</span><span id="line-218"> Bytes.hashCode(getMaxColumn()), getMaxColumnInclusive());</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">204</span><span id="line-204"> public Cell getSkipHint(Cell skippedCell) throws IOException {</span>
+<span class="source-line-no">205</span><span id="line-205"> if (this.minColumn == null) {</span>
+<span class="source-line-no">206</span><span id="line-206"> return null;</span>
+<span class="source-line-no">207</span><span id="line-207"> }</span>
+<span class="source-line-no">208</span><span id="line-208"> return getNextCellHint(skippedCell);</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"> @Override</span>
+<span class="source-line-no">212</span><span id="line-212"> public String toString() {</span>
+<span class="source-line-no">213</span><span id="line-213"> return this.getClass().getSimpleName() + " " + (this.minColumnInclusive ? "[" : "(")</span>
+<span class="source-line-no">214</span><span id="line-214"> + Bytes.toStringBinary(this.minColumn) + ", " + Bytes.toStringBinary(this.maxColumn)</span>
+<span class="source-line-no">215</span><span id="line-215"> + (this.maxColumnInclusive ? "]" : ")");</span>
+<span class="source-line-no">216</span><span id="line-216"> }</span>
+<span class="source-line-no">217</span><span id="line-217"></span>
+<span class="source-line-no">218</span><span id="line-218"> @Override</span>
+<span class="source-line-no">219</span><span id="line-219"> public boolean equals(Object obj) {</span>
+<span class="source-line-no">220</span><span id="line-220"> return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);</span>
+<span class="source-line-no">221</span><span id="line-221"> }</span>
+<span class="source-line-no">222</span><span id="line-222"></span>
+<span class="source-line-no">223</span><span id="line-223"> @Override</span>
+<span class="source-line-no">224</span><span id="line-224"> public int hashCode() {</span>
+<span class="source-line-no">225</span><span id="line-225"> return Objects.hash(Bytes.hashCode(getMinColumn()), getMinColumnInclusive(),</span>
+<span class="source-line-no">226</span><span id="line-226"> Bytes.hashCode(getMaxColumn()), getMaxColumnInclusive());</span>
+<span class="source-line-no">227</span><span id="line-227"> }</span>
+<span class="source-line-no">228</span><span id="line-228">}</span>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/filter/Filter.ReturnCode.html b/devapidocs/src-html/org/apache/hadoop/hbase/filter/Filter.ReturnCode.html
index d4ec9c51692..fb335c4f5ae 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/filter/Filter.ReturnCode.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/filter/Filter.ReturnCode.html
@@ -229,112 +229,118 @@
<span class="source-line-no">216</span><span id="line-216"> * must point to a <em>smaller</em> row key (earlier in reverse-scan direction). The scanner</span>
<span class="source-line-no">217</span><span id="line-217"> * validates hint direction and falls back to {@code nextRow()} if the hint does not advance in</span>
<span class="source-line-no">218</span><span id="line-218"> * the scan direction.</li></span>
-<span class="source-line-no">219</span><span id="line-219"> * <li><strong>Composite filter limitation:</strong> {@code FilterList}, {@code SkipFilter}, and</span>
-<span class="source-line-no">220</span><span id="line-220"> * {@code WhileMatchFilter} do not currently delegate this method to wrapped sub-filters. Hints</span>
-<span class="source-line-no">221</span><span id="line-221"> * from filters used inside these wrappers will be silently ignored.</li></span>
-<span class="source-line-no">222</span><span id="line-222"> * </ul></span>
-<span class="source-line-no">223</span><span id="line-223"> * @param firstRowCell the first cell encountered in the rejected row; contains the row key that</span>
-<span class="source-line-no">224</span><span id="line-224"> * was passed to {@code filterRowKey}</span>
-<span class="source-line-no">225</span><span id="line-225"> * @return a {@link Cell} representing the earliest position the scanner should seek to, or</span>
-<span class="source-line-no">226</span><span id="line-226"> * {@code null} if this filter cannot provide a better position than a sequential skip</span>
-<span class="source-line-no">227</span><span id="line-227"> * @throws IOException in case an I/O or filter-specific failure needs to be signaled</span>
-<span class="source-line-no">228</span><span id="line-228"> * @see #filterRowKey(Cell)</span>
-<span class="source-line-no">229</span><span id="line-229"> */</span>
-<span class="source-line-no">230</span><span id="line-230"> public Cell getHintForRejectedRow(final Cell firstRowCell) throws IOException {</span>
-<span class="source-line-no">231</span><span id="line-231"> return null;</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"> /**</span>
-<span class="source-line-no">235</span><span id="line-235"> * Provides a seek hint for cells that are structurally skipped by the scan pipeline</span>
-<span class="source-line-no">236</span><span id="line-236"> * <em>before</em> {@link #filterCell(Cell)} is ever reached. The pipeline short-circuits on</span>
-<span class="source-line-no">237</span><span id="line-237"> * several criteria — time-range mismatch, column-set exclusion, and version-limit exhaustion —</span>
-<span class="source-line-no">238</span><span id="line-238"> * and in each case the filter is bypassed entirely. When an implementation can compute a</span>
-<span class="source-line-no">239</span><span id="line-239"> * meaningful forward position purely from the cell's coordinates (without needing the</span>
-<span class="source-line-no">240</span><span id="line-240"> * {@code filterCell} call sequence), it should return that position here so the scanner can seek</span>
-<span class="source-line-no">241</span><span id="line-241"> * ahead instead of advancing one cell at a time.</span>
-<span class="source-line-no">242</span><span id="line-242"> * <p></span>
-<span class="source-line-no">243</span><span id="line-243"> * Contract:</span>
-<span class="source-line-no">244</span><span id="line-244"> * <ul></span>
-<span class="source-line-no">245</span><span id="line-245"> * <li>May be called for cells that have <strong>never</strong> been passed to</span>
-<span class="source-line-no">246</span><span id="line-246"> * {@link #filterCell(Cell)}.</li></span>
-<span class="source-line-no">247</span><span id="line-247"> * <li>Implementations <strong>must not</strong> modify any filter state; this method is treated</span>
-<span class="source-line-no">248</span><span id="line-248"> * as logically stateless. Only filters whose hint computation is based solely on immutable</span>
-<span class="source-line-no">249</span><span id="line-249"> * configuration (e.g. a fixed column range or a fuzzy-row pattern) should override this.</li></span>
-<span class="source-line-no">250</span><span id="line-250"> * <li>The returned {@link Cell}, if non-null, must be an</span>
-<span class="source-line-no">251</span><span id="line-251"> * {@link org.apache.hadoop.hbase.ExtendedCell} because filters are evaluated on the server</span>
-<span class="source-line-no">252</span><span id="line-252"> * side.</li></span>
-<span class="source-line-no">253</span><span id="line-253"> * <li>Returning {@code null} (the default) falls through to the existing structural skip/seek</span>
-<span class="source-line-no">254</span><span id="line-254"> * behaviour, preserving full backward compatibility.</li></span>
-<span class="source-line-no">255</span><span id="line-255"> * <li>For reversed scans, the returned cell must have a <em>smaller</em> row key (i.e., earlier</span>
-<span class="source-line-no">256</span><span id="line-256"> * in reverse-scan direction) than the {@code skippedCell}. Hints that do not advance in the scan</span>
-<span class="source-line-no">257</span><span id="line-257"> * direction are silently ignored.</li></span>
-<span class="source-line-no">258</span><span id="line-258"> * <li><strong>Composite filter limitation:</strong> {@code FilterList}, {@code SkipFilter}, and</span>
-<span class="source-line-no">259</span><span id="line-259"> * {@code WhileMatchFilter} do not currently delegate this method to wrapped sub-filters. Hints</span>
-<span class="source-line-no">260</span><span id="line-260"> * from filters used inside these wrappers will be silently ignored.</li></span>
-<span class="source-line-no">261</span><span id="line-261"> * </ul></span>
-<span class="source-line-no">262</span><span id="line-262"> * @param skippedCell the cell that was rejected by the time-range, column, or version gate before</span>
-<span class="source-line-no">263</span><span id="line-263"> * {@code filterCell} could be consulted</span>
-<span class="source-line-no">264</span><span id="line-264"> * @return a {@link Cell} representing the earliest position the scanner should seek to, or</span>
-<span class="source-line-no">265</span><span id="line-265"> * {@code null} if this filter cannot provide a better position than the structural hint</span>
-<span class="source-line-no">266</span><span id="line-266"> * @throws IOException in case an I/O or filter-specific failure needs to be signaled</span>
-<span class="source-line-no">267</span><span id="line-267"> * @see #filterCell(Cell)</span>
-<span class="source-line-no">268</span><span id="line-268"> * @see #getNextCellHint(Cell)</span>
-<span class="source-line-no">269</span><span id="line-269"> */</span>
-<span class="source-line-no">270</span><span id="line-270"> public Cell getSkipHint(final Cell skippedCell) throws IOException {</span>
-<span class="source-line-no">271</span><span id="line-271"> return null;</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"> * Check that given column family is essential for filter to check row. Most filters always return</span>
-<span class="source-line-no">276</span><span id="line-276"> * true here. But some could have more sophisticated logic which could significantly reduce</span>
-<span class="source-line-no">277</span><span id="line-277"> * scanning process by not even touching columns until we are 100% sure that it's data is needed</span>
-<span class="source-line-no">278</span><span id="line-278"> * in result. Concrete implementers can signal a failure condition in their code by throwing an</span>
-<span class="source-line-no">279</span><span id="line-279"> * {@link IOException}.</span>
-<span class="source-line-no">280</span><span id="line-280"> * @throws IOException in case an I/O or an filter specific failure needs to be signaled.</span>
-<span class="source-line-no">281</span><span id="line-281"> */</span>
-<span class="source-line-no">282</span><span id="line-282"> abstract public boolean isFamilyEssential(byte[] name) throws IOException;</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"> * TODO: JAVADOC Concrete implementers can signal a failure condition in their code by throwing an</span>
-<span class="source-line-no">286</span><span id="line-286"> * {@link IOException}.</span>
-<span class="source-line-no">287</span><span id="line-287"> * @return The filter serialized using pb</span>
-<span class="source-line-no">288</span><span id="line-288"> * @throws IOException in case an I/O or an filter specific failure needs to be signaled.</span>
-<span class="source-line-no">289</span><span id="line-289"> */</span>
-<span class="source-line-no">290</span><span id="line-290"> abstract public byte[] toByteArray() throws IOException;</span>
-<span class="source-line-no">291</span><span id="line-291"></span>
-<span class="source-line-no">292</span><span id="line-292"> /**</span>
-<span class="source-line-no">293</span><span id="line-293"> * Concrete implementers can signal a failure condition in their code by throwing an</span>
-<span class="source-line-no">294</span><span id="line-294"> * {@link IOException}.</span>
-<span class="source-line-no">295</span><span id="line-295"> * @param pbBytes A pb serialized {@link Filter} instance</span>
-<span class="source-line-no">296</span><span id="line-296"> * @return An instance of {@link Filter} made from <code>bytes</code></span>
-<span class="source-line-no">297</span><span id="line-297"> * @throws DeserializationException if an error occurred</span>
-<span class="source-line-no">298</span><span id="line-298"> * @see #toByteArray</span>
-<span class="source-line-no">299</span><span id="line-299"> */</span>
-<span class="source-line-no">300</span><span id="line-300"> public static Filter parseFrom(final byte[] pbBytes) throws DeserializationException {</span>
-<span class="source-line-no">301</span><span id="line-301"> throw new DeserializationException(</span>
-<span class="source-line-no">302</span><span id="line-302"> "parseFrom called on base Filter, but should be called on derived type");</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"> * Concrete implementers can signal a failure condition in their code by throwing an</span>
-<span class="source-line-no">307</span><span id="line-307"> * {@link IOException}.</span>
-<span class="source-line-no">308</span><span id="line-308"> * @return true if and only if the fields of the filter that are serialized are equal to the</span>
-<span class="source-line-no">309</span><span id="line-309"> * corresponding fields in other. Used for testing.</span>
-<span class="source-line-no">310</span><span id="line-310"> */</span>
-<span class="source-line-no">311</span><span id="line-311"> abstract boolean areSerializedFieldsEqual(Filter other);</span>
-<span class="source-line-no">312</span><span id="line-312"></span>
-<span class="source-line-no">313</span><span id="line-313"> /**</span>
-<span class="source-line-no">314</span><span id="line-314"> * alter the reversed scan flag</span>
-<span class="source-line-no">315</span><span id="line-315"> * @param reversed flag</span>
+<span class="source-line-no">219</span><span id="line-219"> * <li><strong>Composite filter support:</strong> {@code FilterList} (both {@code MUST_PASS_ALL}</span>
+<span class="source-line-no">220</span><span id="line-220"> * and {@code MUST_PASS_ONE}), {@code SkipFilter}, and {@code WhileMatchFilter} delegate this</span>
+<span class="source-line-no">221</span><span id="line-221"> * method to their sub-filters and merge the results. For AND ({@code MUST_PASS_ALL}), only</span>
+<span class="source-line-no">222</span><span id="line-222"> * sub-filters whose {@code filterRowKey} individually returned {@code true} are consulted, and</span>
+<span class="source-line-no">223</span><span id="line-223"> * the farthest (maximal-step) hint among them is returned. For OR ({@code MUST_PASS_ONE}), the</span>
+<span class="source-line-no">224</span><span id="line-224"> * nearest hint is returned only when every non-terminated sub-filter provides one — any null</span>
+<span class="source-line-no">225</span><span id="line-225"> * collapses the OR result to null.</li></span>
+<span class="source-line-no">226</span><span id="line-226"> * </ul></span>
+<span class="source-line-no">227</span><span id="line-227"> * @param firstRowCell the first cell encountered in the rejected row; contains the row key that</span>
+<span class="source-line-no">228</span><span id="line-228"> * was passed to {@code filterRowKey}</span>
+<span class="source-line-no">229</span><span id="line-229"> * @return a {@link Cell} representing the earliest position the scanner should seek to, or</span>
+<span class="source-line-no">230</span><span id="line-230"> * {@code null} if this filter cannot provide a better position than a sequential skip</span>
+<span class="source-line-no">231</span><span id="line-231"> * @throws IOException in case an I/O or filter-specific failure needs to be signaled</span>
+<span class="source-line-no">232</span><span id="line-232"> * @see #filterRowKey(Cell)</span>
+<span class="source-line-no">233</span><span id="line-233"> */</span>
+<span class="source-line-no">234</span><span id="line-234"> public Cell getHintForRejectedRow(final Cell firstRowCell) throws IOException {</span>
+<span class="source-line-no">235</span><span id="line-235"> return null;</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"> /**</span>
+<span class="source-line-no">239</span><span id="line-239"> * Provides a seek hint for cells that are structurally skipped by the scan pipeline</span>
+<span class="source-line-no">240</span><span id="line-240"> * <em>before</em> {@link #filterCell(Cell)} is ever reached. The pipeline short-circuits on</span>
+<span class="source-line-no">241</span><span id="line-241"> * several criteria — time-range mismatch, column-set exclusion, and version-limit exhaustion —</span>
+<span class="source-line-no">242</span><span id="line-242"> * and in each case the filter is bypassed entirely. When an implementation can compute a</span>
+<span class="source-line-no">243</span><span id="line-243"> * meaningful forward position purely from the cell's coordinates (without needing the</span>
+<span class="source-line-no">244</span><span id="line-244"> * {@code filterCell} call sequence), it should return that position here so the scanner can seek</span>
+<span class="source-line-no">245</span><span id="line-245"> * ahead instead of advancing one cell at a time.</span>
+<span class="source-line-no">246</span><span id="line-246"> * <p></span>
+<span class="source-line-no">247</span><span id="line-247"> * Contract:</span>
+<span class="source-line-no">248</span><span id="line-248"> * <ul></span>
+<span class="source-line-no">249</span><span id="line-249"> * <li>May be called for cells that have <strong>never</strong> been passed to</span>
+<span class="source-line-no">250</span><span id="line-250"> * {@link #filterCell(Cell)}.</li></span>
+<span class="source-line-no">251</span><span id="line-251"> * <li>Implementations <strong>must not</strong> modify any filter state; this method is treated</span>
+<span class="source-line-no">252</span><span id="line-252"> * as logically stateless. Only filters whose hint computation is based solely on immutable</span>
+<span class="source-line-no">253</span><span id="line-253"> * configuration (e.g. a fixed column range or a fuzzy-row pattern) should override this.</li></span>
+<span class="source-line-no">254</span><span id="line-254"> * <li>The returned {@link Cell}, if non-null, must be an</span>
+<span class="source-line-no">255</span><span id="line-255"> * {@link org.apache.hadoop.hbase.ExtendedCell} because filters are evaluated on the server</span>
+<span class="source-line-no">256</span><span id="line-256"> * side.</li></span>
+<span class="source-line-no">257</span><span id="line-257"> * <li>Returning {@code null} (the default) falls through to the existing structural skip/seek</span>
+<span class="source-line-no">258</span><span id="line-258"> * behaviour, preserving full backward compatibility.</li></span>
+<span class="source-line-no">259</span><span id="line-259"> * <li>For reversed scans, the returned cell must have a <em>smaller</em> row key (i.e., earlier</span>
+<span class="source-line-no">260</span><span id="line-260"> * in reverse-scan direction) than the {@code skippedCell}. Hints that do not advance in the scan</span>
+<span class="source-line-no">261</span><span id="line-261"> * direction are silently ignored.</li></span>
+<span class="source-line-no">262</span><span id="line-262"> * <li><strong>Composite filter support:</strong> {@code FilterList} (both {@code MUST_PASS_ALL}</span>
+<span class="source-line-no">263</span><span id="line-263"> * and {@code MUST_PASS_ONE}), {@code SkipFilter}, and {@code WhileMatchFilter} delegate this</span>
+<span class="source-line-no">264</span><span id="line-264"> * method to their sub-filters and merge the results (maximal step for AND; for OR, the nearest</span>
+<span class="source-line-no">265</span><span id="line-265"> * hint is returned only when every non-terminated sub-filter provides one — any null collapses</span>
+<span class="source-line-no">266</span><span id="line-266"> * the OR result to null).</li></span>
+<span class="source-line-no">267</span><span id="line-267"> * </ul></span>
+<span class="source-line-no">268</span><span id="line-268"> * @param skippedCell the cell that was rejected by the time-range, column, or version gate before</span>
+<span class="source-line-no">269</span><span id="line-269"> * {@code filterCell} could be consulted</span>
+<span class="source-line-no">270</span><span id="line-270"> * @return a {@link Cell} representing the earliest position the scanner should seek to, or</span>
+<span class="source-line-no">271</span><span id="line-271"> * {@code null} if this filter cannot provide a better position than the structural hint</span>
+<span class="source-line-no">272</span><span id="line-272"> * @throws IOException in case an I/O or filter-specific failure needs to be signaled</span>
+<span class="source-line-no">273</span><span id="line-273"> * @see #filterCell(Cell)</span>
+<span class="source-line-no">274</span><span id="line-274"> * @see #getNextCellHint(Cell)</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 Cell getSkipHint(final Cell skippedCell) throws IOException {</span>
+<span class="source-line-no">277</span><span id="line-277"> return null;</span>
+<span class="source-line-no">278</span><span id="line-278"> }</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"> * Check that given column family is essential for filter to check row. Most filters always return</span>
+<span class="source-line-no">282</span><span id="line-282"> * true here. But some could have more sophisticated logic which could significantly reduce</span>
+<span class="source-line-no">283</span><span id="line-283"> * scanning process by not even touching columns until we are 100% sure that it's data is needed</span>
+<span class="source-line-no">284</span><span id="line-284"> * in result. Concrete implementers can signal a failure condition in their code by throwing an</span>
+<span class="source-line-no">285</span><span id="line-285"> * {@link IOException}.</span>
+<span class="source-line-no">286</span><span id="line-286"> * @throws IOException in case an I/O or an filter specific failure needs to be signaled.</span>
+<span class="source-line-no">287</span><span id="line-287"> */</span>
+<span class="source-line-no">288</span><span id="line-288"> abstract public boolean isFamilyEssential(byte[] name) throws IOException;</span>
+<span class="source-line-no">289</span><span id="line-289"></span>
+<span class="source-line-no">290</span><span id="line-290"> /**</span>
+<span class="source-line-no">291</span><span id="line-291"> * TODO: JAVADOC Concrete implementers can signal a failure condition in their code by throwing an</span>
+<span class="source-line-no">292</span><span id="line-292"> * {@link IOException}.</span>
+<span class="source-line-no">293</span><span id="line-293"> * @return The filter serialized using pb</span>
+<span class="source-line-no">294</span><span id="line-294"> * @throws IOException in case an I/O or an filter specific failure needs to be signaled.</span>
+<span class="source-line-no">295</span><span id="line-295"> */</span>
+<span class="source-line-no">296</span><span id="line-296"> abstract public byte[] toByteArray() throws IOException;</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"> * Concrete implementers can signal a failure condition in their code by throwing an</span>
+<span class="source-line-no">300</span><span id="line-300"> * {@link IOException}.</span>
+<span class="source-line-no">301</span><span id="line-301"> * @param pbBytes A pb serialized {@link Filter} instance</span>
+<span class="source-line-no">302</span><span id="line-302"> * @return An instance of {@link Filter} made from <code>bytes</code></span>
+<span class="source-line-no">303</span><span id="line-303"> * @throws DeserializationException if an error occurred</span>
+<span class="source-line-no">304</span><span id="line-304"> * @see #toByteArray</span>
+<span class="source-line-no">305</span><span id="line-305"> */</span>
+<span class="source-line-no">306</span><span id="line-306"> public static Filter parseFrom(final byte[] pbBytes) throws DeserializationException {</span>
+<span class="source-line-no">307</span><span id="line-307"> throw new DeserializationException(</span>
+<span class="source-line-no">308</span><span id="line-308"> "parseFrom called on base Filter, but should be called on derived type");</span>
+<span class="source-line-no">309</span><span id="line-309"> }</span>
+<span class="source-line-no">310</span><span id="line-310"></span>
+<span class="source-line-no">311</span><span id="line-311"> /**</span>
+<span class="source-line-no">312</span><span id="line-312"> * Concrete implementers can signal a failure condition in their code by throwing an</span>
+<span class="source-line-no">313</span><span id="line-313"> * {@link IOException}.</span>
+<span class="source-line-no">314</span><span id="line-314"> * @return true if and only if the fields of the filter that are serialized are equal to the</span>
+<span class="source-line-no">315</span><span id="line-315"> * corresponding fields in other. Used for testing.</span>
<span class="source-line-no">316</span><span id="line-316"> */</span>
-<span class="source-line-no">317</span><span id="line-317"> public void setReversed(boolean reversed) {</span>
-<span class="source-line-no">318</span><span id="line-318"> this.reversed = reversed;</span>
-<span class="source-line-no">319</span><span id="line-319"> }</span>
-<span class="source-line-no">320</span><span id="line-320"></span>
-<span class="source-line-no">321</span><span id="line-321"> public boolean isReversed() {</span>
-<span class="source-line-no">322</span><span id="line-322"> return this.reversed;</span>
-<span class="source-line-no">323</span><span id="line-323"> }</span>
-<span class="source-line-no">324</span><span id="line-324">}</span>
+<span class="source-line-no">317</span><span id="line-317"> abstract boolean areSerializedFieldsEqual(Filter other);</span>
+<span class="source-line-no">318</span><span id="line-318"></span>
+<span class="source-line-no">319</span><span id="line-319"> /**</span>
+<span class="source-line-no">320</span><span id="line-320"> * alter the reversed scan flag</span>
+<span class="source-line-no">321</span><span id="line-321"> * @param reversed flag</span>
+<span class="source-line-no">322</span><span id="line-322"> */</span>
+<span class="source-line-no">323</span><span id="line-323"> public void setReversed(boolean reversed) {</span>
+<span class="source-line-no">324</span><span id="line-324"> this.reversed = reversed;</span>
+<span class="source-line-no">325</span><span id="line-325"> }</span>
+<span class="source-line-no">326</span><span id="line-326"></span>
+<span class="source-line-no">327</span><span id="line-327"> public boolean isReversed() {</span>
+<span class="source-line-no">328</span><span id="line-328"> return this.reversed;</span>
+<span class="source-line-no">329</span><span id="line-329"> }</span>
+<span class="source-line-no">330</span><span id="line-330">}</span>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/filter/Filter.html b/devapidocs/src-html/org/apache/hadoop/hbase/filter/Filter.html
index 2f33d98eb0f..aeb5a0847b5 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/filter/Filter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/filter/Filter.html
@@ -229,112 +229,118 @@
<span class="source-line-no">216</span><span id="line-216"> * must point to a <em>smaller</em> row key (earlier in reverse-scan direction). The scanner</span>
<span class="source-line-no">217</span><span id="line-217"> * validates hint direction and falls back to {@code nextRow()} if the hint does not advance in</span>
<span class="source-line-no">218</span><span id="line-218"> * the scan direction.</li></span>
-<span class="source-line-no">219</span><span id="line-219"> * <li><strong>Composite filter limitation:</strong> {@code FilterList}, {@code SkipFilter}, and</span>
-<span class="source-line-no">220</span><span id="line-220"> * {@code WhileMatchFilter} do not currently delegate this method to wrapped sub-filters. Hints</span>
-<span class="source-line-no">221</span><span id="line-221"> * from filters used inside these wrappers will be silently ignored.</li></span>
-<span class="source-line-no">222</span><span id="line-222"> * </ul></span>
-<span class="source-line-no">223</span><span id="line-223"> * @param firstRowCell the first cell encountered in the rejected row; contains the row key that</span>
-<span class="source-line-no">224</span><span id="line-224"> * was passed to {@code filterRowKey}</span>
-<span class="source-line-no">225</span><span id="line-225"> * @return a {@link Cell} representing the earliest position the scanner should seek to, or</span>
-<span class="source-line-no">226</span><span id="line-226"> * {@code null} if this filter cannot provide a better position than a sequential skip</span>
-<span class="source-line-no">227</span><span id="line-227"> * @throws IOException in case an I/O or filter-specific failure needs to be signaled</span>
-<span class="source-line-no">228</span><span id="line-228"> * @see #filterRowKey(Cell)</span>
-<span class="source-line-no">229</span><span id="line-229"> */</span>
-<span class="source-line-no">230</span><span id="line-230"> public Cell getHintForRejectedRow(final Cell firstRowCell) throws IOException {</span>
-<span class="source-line-no">231</span><span id="line-231"> return null;</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"> /**</span>
-<span class="source-line-no">235</span><span id="line-235"> * Provides a seek hint for cells that are structurally skipped by the scan pipeline</span>
-<span class="source-line-no">236</span><span id="line-236"> * <em>before</em> {@link #filterCell(Cell)} is ever reached. The pipeline short-circuits on</span>
-<span class="source-line-no">237</span><span id="line-237"> * several criteria — time-range mismatch, column-set exclusion, and version-limit exhaustion —</span>
-<span class="source-line-no">238</span><span id="line-238"> * and in each case the filter is bypassed entirely. When an implementation can compute a</span>
-<span class="source-line-no">239</span><span id="line-239"> * meaningful forward position purely from the cell's coordinates (without needing the</span>
-<span class="source-line-no">240</span><span id="line-240"> * {@code filterCell} call sequence), it should return that position here so the scanner can seek</span>
-<span class="source-line-no">241</span><span id="line-241"> * ahead instead of advancing one cell at a time.</span>
-<span class="source-line-no">242</span><span id="line-242"> * <p></span>
-<span class="source-line-no">243</span><span id="line-243"> * Contract:</span>
-<span class="source-line-no">244</span><span id="line-244"> * <ul></span>
-<span class="source-line-no">245</span><span id="line-245"> * <li>May be called for cells that have <strong>never</strong> been passed to</span>
-<span class="source-line-no">246</span><span id="line-246"> * {@link #filterCell(Cell)}.</li></span>
-<span class="source-line-no">247</span><span id="line-247"> * <li>Implementations <strong>must not</strong> modify any filter state; this method is treated</span>
-<span class="source-line-no">248</span><span id="line-248"> * as logically stateless. Only filters whose hint computation is based solely on immutable</span>
-<span class="source-line-no">249</span><span id="line-249"> * configuration (e.g. a fixed column range or a fuzzy-row pattern) should override this.</li></span>
-<span class="source-line-no">250</span><span id="line-250"> * <li>The returned {@link Cell}, if non-null, must be an</span>
-<span class="source-line-no">251</span><span id="line-251"> * {@link org.apache.hadoop.hbase.ExtendedCell} because filters are evaluated on the server</span>
-<span class="source-line-no">252</span><span id="line-252"> * side.</li></span>
-<span class="source-line-no">253</span><span id="line-253"> * <li>Returning {@code null} (the default) falls through to the existing structural skip/seek</span>
-<span class="source-line-no">254</span><span id="line-254"> * behaviour, preserving full backward compatibility.</li></span>
-<span class="source-line-no">255</span><span id="line-255"> * <li>For reversed scans, the returned cell must have a <em>smaller</em> row key (i.e., earlier</span>
-<span class="source-line-no">256</span><span id="line-256"> * in reverse-scan direction) than the {@code skippedCell}. Hints that do not advance in the scan</span>
-<span class="source-line-no">257</span><span id="line-257"> * direction are silently ignored.</li></span>
-<span class="source-line-no">258</span><span id="line-258"> * <li><strong>Composite filter limitation:</strong> {@code FilterList}, {@code SkipFilter}, and</span>
-<span class="source-line-no">259</span><span id="line-259"> * {@code WhileMatchFilter} do not currently delegate this method to wrapped sub-filters. Hints</span>
-<span class="source-line-no">260</span><span id="line-260"> * from filters used inside these wrappers will be silently ignored.</li></span>
-<span class="source-line-no">261</span><span id="line-261"> * </ul></span>
-<span class="source-line-no">262</span><span id="line-262"> * @param skippedCell the cell that was rejected by the time-range, column, or version gate before</span>
-<span class="source-line-no">263</span><span id="line-263"> * {@code filterCell} could be consulted</span>
-<span class="source-line-no">264</span><span id="line-264"> * @return a {@link Cell} representing the earliest position the scanner should seek to, or</span>
-<span class="source-line-no">265</span><span id="line-265"> * {@code null} if this filter cannot provide a better position than the structural hint</span>
-<span class="source-line-no">266</span><span id="line-266"> * @throws IOException in case an I/O or filter-specific failure needs to be signaled</span>
-<span class="source-line-no">267</span><span id="line-267"> * @see #filterCell(Cell)</span>
-<span class="source-line-no">268</span><span id="line-268"> * @see #getNextCellHint(Cell)</span>
-<span class="source-line-no">269</span><span id="line-269"> */</span>
-<span class="source-line-no">270</span><span id="line-270"> public Cell getSkipHint(final Cell skippedCell) throws IOException {</span>
-<span class="source-line-no">271</span><span id="line-271"> return null;</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"> * Check that given column family is essential for filter to check row. Most filters always return</span>
-<span class="source-line-no">276</span><span id="line-276"> * true here. But some could have more sophisticated logic which could significantly reduce</span>
-<span class="source-line-no">277</span><span id="line-277"> * scanning process by not even touching columns until we are 100% sure that it's data is needed</span>
-<span class="source-line-no">278</span><span id="line-278"> * in result. Concrete implementers can signal a failure condition in their code by throwing an</span>
-<span class="source-line-no">279</span><span id="line-279"> * {@link IOException}.</span>
-<span class="source-line-no">280</span><span id="line-280"> * @throws IOException in case an I/O or an filter specific failure needs to be signaled.</span>
-<span class="source-line-no">281</span><span id="line-281"> */</span>
-<span class="source-line-no">282</span><span id="line-282"> abstract public boolean isFamilyEssential(byte[] name) throws IOException;</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"> * TODO: JAVADOC Concrete implementers can signal a failure condition in their code by throwing an</span>
-<span class="source-line-no">286</span><span id="line-286"> * {@link IOException}.</span>
-<span class="source-line-no">287</span><span id="line-287"> * @return The filter serialized using pb</span>
-<span class="source-line-no">288</span><span id="line-288"> * @throws IOException in case an I/O or an filter specific failure needs to be signaled.</span>
-<span class="source-line-no">289</span><span id="line-289"> */</span>
-<span class="source-line-no">290</span><span id="line-290"> abstract public byte[] toByteArray() throws IOException;</span>
-<span class="source-line-no">291</span><span id="line-291"></span>
-<span class="source-line-no">292</span><span id="line-292"> /**</span>
-<span class="source-line-no">293</span><span id="line-293"> * Concrete implementers can signal a failure condition in their code by throwing an</span>
-<span class="source-line-no">294</span><span id="line-294"> * {@link IOException}.</span>
-<span class="source-line-no">295</span><span id="line-295"> * @param pbBytes A pb serialized {@link Filter} instance</span>
-<span class="source-line-no">296</span><span id="line-296"> * @return An instance of {@link Filter} made from <code>bytes</code></span>
-<span class="source-line-no">297</span><span id="line-297"> * @throws DeserializationException if an error occurred</span>
-<span class="source-line-no">298</span><span id="line-298"> * @see #toByteArray</span>
-<span class="source-line-no">299</span><span id="line-299"> */</span>
-<span class="source-line-no">300</span><span id="line-300"> public static Filter parseFrom(final byte[] pbBytes) throws DeserializationException {</span>
-<span class="source-line-no">301</span><span id="line-301"> throw new DeserializationException(</span>
-<span class="source-line-no">302</span><span id="line-302"> "parseFrom called on base Filter, but should be called on derived type");</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"> * Concrete implementers can signal a failure condition in their code by throwing an</span>
-<span class="source-line-no">307</span><span id="line-307"> * {@link IOException}.</span>
-<span class="source-line-no">308</span><span id="line-308"> * @return true if and only if the fields of the filter that are serialized are equal to the</span>
-<span class="source-line-no">309</span><span id="line-309"> * corresponding fields in other. Used for testing.</span>
-<span class="source-line-no">310</span><span id="line-310"> */</span>
-<span class="source-line-no">311</span><span id="line-311"> abstract boolean areSerializedFieldsEqual(Filter other);</span>
-<span class="source-line-no">312</span><span id="line-312"></span>
-<span class="source-line-no">313</span><span id="line-313"> /**</span>
-<span class="source-line-no">314</span><span id="line-314"> * alter the reversed scan flag</span>
-<span class="source-line-no">315</span><span id="line-315"> * @param reversed flag</span>
+<span class="source-line-no">219</span><span id="line-219"> * <li><strong>Composite filter support:</strong> {@code FilterList} (both {@code MUST_PASS_ALL}</span>
+<span class="source-line-no">220</span><span id="line-220"> * and {@code MUST_PASS_ONE}), {@code SkipFilter}, and {@code WhileMatchFilter} delegate this</span>
+<span class="source-line-no">221</span><span id="line-221"> * method to their sub-filters and merge the results. For AND ({@code MUST_PASS_ALL}), only</span>
+<span class="source-line-no">222</span><span id="line-222"> * sub-filters whose {@code filterRowKey} individually returned {@code true} are consulted, and</span>
+<span class="source-line-no">223</span><span id="line-223"> * the farthest (maximal-step) hint among them is returned. For OR ({@code MUST_PASS_ONE}), the</span>
+<span class="source-line-no">224</span><span id="line-224"> * nearest hint is returned only when every non-terminated sub-filter provides one — any null</span>
+<span class="source-line-no">225</span><span id="line-225"> * collapses the OR result to null.</li></span>
+<span class="source-line-no">226</span><span id="line-226"> * </ul></span>
+<span class="source-line-no">227</span><span id="line-227"> * @param firstRowCell the first cell encountered in the rejected row; contains the row key that</span>
+<span class="source-line-no">228</span><span id="line-228"> * was passed to {@code filterRowKey}</span>
+<span class="source-line-no">229</span><span id="line-229"> * @return a {@link Cell} representing the earliest position the scanner should seek to, or</span>
+<span class="source-line-no">230</span><span id="line-230"> * {@code null} if this filter cannot provide a better position than a sequential skip</span>
+<span class="source-line-no">231</span><span id="line-231"> * @throws IOException in case an I/O or filter-specific failure needs to be signaled</span>
+<span class="source-line-no">232</span><span id="line-232"> * @see #filterRowKey(Cell)</span>
+<span class="source-line-no">233</span><span id="line-233"> */</span>
+<span class="source-line-no">234</span><span id="line-234"> public Cell getHintForRejectedRow(final Cell firstRowCell) throws IOException {</span>
+<span class="source-line-no">235</span><span id="line-235"> return null;</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"> /**</span>
+<span class="source-line-no">239</span><span id="line-239"> * Provides a seek hint for cells that are structurally skipped by the scan pipeline</span>
+<span class="source-line-no">240</span><span id="line-240"> * <em>before</em> {@link #filterCell(Cell)} is ever reached. The pipeline short-circuits on</span>
+<span class="source-line-no">241</span><span id="line-241"> * several criteria — time-range mismatch, column-set exclusion, and version-limit exhaustion —</span>
+<span class="source-line-no">242</span><span id="line-242"> * and in each case the filter is bypassed entirely. When an implementation can compute a</span>
+<span class="source-line-no">243</span><span id="line-243"> * meaningful forward position purely from the cell's coordinates (without needing the</span>
+<span class="source-line-no">244</span><span id="line-244"> * {@code filterCell} call sequence), it should return that position here so the scanner can seek</span>
+<span class="source-line-no">245</span><span id="line-245"> * ahead instead of advancing one cell at a time.</span>
+<span class="source-line-no">246</span><span id="line-246"> * <p></span>
+<span class="source-line-no">247</span><span id="line-247"> * Contract:</span>
+<span class="source-line-no">248</span><span id="line-248"> * <ul></span>
+<span class="source-line-no">249</span><span id="line-249"> * <li>May be called for cells that have <strong>never</strong> been passed to</span>
+<span class="source-line-no">250</span><span id="line-250"> * {@link #filterCell(Cell)}.</li></span>
+<span class="source-line-no">251</span><span id="line-251"> * <li>Implementations <strong>must not</strong> modify any filter state; this method is treated</span>
+<span class="source-line-no">252</span><span id="line-252"> * as logically stateless. Only filters whose hint computation is based solely on immutable</span>
+<span class="source-line-no">253</span><span id="line-253"> * configuration (e.g. a fixed column range or a fuzzy-row pattern) should override this.</li></span>
+<span class="source-line-no">254</span><span id="line-254"> * <li>The returned {@link Cell}, if non-null, must be an</span>
+<span class="source-line-no">255</span><span id="line-255"> * {@link org.apache.hadoop.hbase.ExtendedCell} because filters are evaluated on the server</span>
+<span class="source-line-no">256</span><span id="line-256"> * side.</li></span>
+<span class="source-line-no">257</span><span id="line-257"> * <li>Returning {@code null} (the default) falls through to the existing structural skip/seek</span>
+<span class="source-line-no">258</span><span id="line-258"> * behaviour, preserving full backward compatibility.</li></span>
+<span class="source-line-no">259</span><span id="line-259"> * <li>For reversed scans, the returned cell must have a <em>smaller</em> row key (i.e., earlier</span>
+<span class="source-line-no">260</span><span id="line-260"> * in reverse-scan direction) than the {@code skippedCell}. Hints that do not advance in the scan</span>
+<span class="source-line-no">261</span><span id="line-261"> * direction are silently ignored.</li></span>
+<span class="source-line-no">262</span><span id="line-262"> * <li><strong>Composite filter support:</strong> {@code FilterList} (both {@code MUST_PASS_ALL}</span>
+<span class="source-line-no">263</span><span id="line-263"> * and {@code MUST_PASS_ONE}), {@code SkipFilter}, and {@code WhileMatchFilter} delegate this</span>
+<span class="source-line-no">264</span><span id="line-264"> * method to their sub-filters and merge the results (maximal step for AND; for OR, the nearest</span>
+<span class="source-line-no">265</span><span id="line-265"> * hint is returned only when every non-terminated sub-filter provides one — any null collapses</span>
+<span class="source-line-no">266</span><span id="line-266"> * the OR result to null).</li></span>
+<span class="source-line-no">267</span><span id="line-267"> * </ul></span>
+<span class="source-line-no">268</span><span id="line-268"> * @param skippedCell the cell that was rejected by the time-range, column, or version gate before</span>
+<span class="source-line-no">269</span><span id="line-269"> * {@code filterCell} could be consulted</span>
+<span class="source-line-no">270</span><span id="line-270"> * @return a {@link Cell} representing the earliest position the scanner should seek to, or</span>
+<span class="source-line-no">271</span><span id="line-271"> * {@code null} if this filter cannot provide a better position than the structural hint</span>
+<span class="source-line-no">272</span><span id="line-272"> * @throws IOException in case an I/O or filter-specific failure needs to be signaled</span>
+<span class="source-line-no">273</span><span id="line-273"> * @see #filterCell(Cell)</span>
+<span class="source-line-no">274</span><span id="line-274"> * @see #getNextCellHint(Cell)</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 Cell getSkipHint(final Cell skippedCell) throws IOException {</span>
+<span class="source-line-no">277</span><span id="line-277"> return null;</span>
+<span class="source-line-no">278</span><span id="line-278"> }</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"> * Check that given column family is essential for filter to check row. Most filters always return</span>
+<span class="source-line-no">282</span><span id="line-282"> * true here. But some could have more sophisticated logic which could significantly reduce</span>
+<span class="source-line-no">283</span><span id="line-283"> * scanning process by not even touching columns until we are 100% sure that it's data is needed</span>
+<span class="source-line-no">284</span><span id="line-284"> * in result. Concrete implementers can signal a failure condition in their code by throwing an</span>
+<span class="source-line-no">285</span><span id="line-285"> * {@link IOException}.</span>
+<span class="source-line-no">286</span><span id="line-286"> * @throws IOException in case an I/O or an filter specific failure needs to be signaled.</span>
+<span class="source-line-no">287</span><span id="line-287"> */</span>
+<span class="source-line-no">288</span><span id="line-288"> abstract public boolean isFamilyEssential(byte[] name) throws IOException;</span>
+<span class="source-line-no">289</span><span id="line-289"></span>
+<span class="source-line-no">290</span><span id="line-290"> /**</span>
+<span class="source-line-no">291</span><span id="line-291"> * TODO: JAVADOC Concrete implementers can signal a failure condition in their code by throwing an</span>
+<span class="source-line-no">292</span><span id="line-292"> * {@link IOException}.</span>
+<span class="source-line-no">293</span><span id="line-293"> * @return The filter serialized using pb</span>
+<span class="source-line-no">294</span><span id="line-294"> * @throws IOException in case an I/O or an filter specific failure needs to be signaled.</span>
+<span class="source-line-no">295</span><span id="line-295"> */</span>
+<span class="source-line-no">296</span><span id="line-296"> abstract public byte[] toByteArray() throws IOException;</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"> * Concrete implementers can signal a failure condition in their code by throwing an</span>
+<span class="source-line-no">300</span><span id="line-300"> * {@link IOException}.</span>
+<span class="source-line-no">301</span><span id="line-301"> * @param pbBytes A pb serialized {@link Filter} instance</span>
+<span class="source-line-no">302</span><span id="line-302"> * @return An instance of {@link Filter} made from <code>bytes</code></span>
+<span class="source-line-no">303</span><span id="line-303"> * @throws DeserializationException if an error occurred</span>
+<span class="source-line-no">304</span><span id="line-304"> * @see #toByteArray</span>
+<span class="source-line-no">305</span><span id="line-305"> */</span>
+<span class="source-line-no">306</span><span id="line-306"> public static Filter parseFrom(final byte[] pbBytes) throws DeserializationException {</span>
+<span class="source-line-no">307</span><span id="line-307"> throw new DeserializationException(</span>
+<span class="source-line-no">308</span><span id="line-308"> "parseFrom called on base Filter, but should be called on derived type");</span>
+<span class="source-line-no">309</span><span id="line-309"> }</span>
+<span class="source-line-no">310</span><span id="line-310"></span>
+<span class="source-line-no">311</span><span id="line-311"> /**</span>
+<span class="source-line-no">312</span><span id="line-312"> * Concrete implementers can signal a failure condition in their code by throwing an</span>
+<span class="source-line-no">313</span><span id="line-313"> * {@link IOException}.</span>
+<span class="source-line-no">314</span><span id="line-314"> * @return true if and only if the fields of the filter that are serialized are equal to the</span>
+<span class="source-line-no">315</span><span id="line-315"> * corresponding fields in other. Used for testing.</span>
<span class="source-line-no">316</span><span id="line-316"> */</span>
-<span class="source-line-no">317</span><span id="line-317"> public void setReversed(boolean reversed) {</span>
-<span class="source-line-no">318</span><span id="line-318"> this.reversed = reversed;</span>
-<span class="source-line-no">319</span><span id="line-319"> }</span>
-<span class="source-line-no">320</span><span id="line-320"></span>
-<span class="source-line-no">321</span><span id="line-321"> public boolean isReversed() {</span>
-<span class="source-line-no">322</span><span id="line-322"> return this.reversed;</span>
-<span class="source-line-no">323</span><span id="line-323"> }</span>
-<span class="source-line-no">324</span><span id="line-324">}</span>
+<span class="source-line-no">317</span><span id="line-317"> abstract boolean areSerializedFieldsEqual(Filter other);</span>
+<span class="source-line-no">318</span><span id="line-318"></span>
+<span class="source-line-no">319</span><span id="line-319"> /**</span>
+<span class="source-line-no">320</span><span id="line-320"> * alter the reversed scan flag</span>
+<span class="source-line-no">321</span><span id="line-321"> * @param reversed flag</span>
+<span class="source-line-no">322</span><span id="line-322"> */</span>
+<span class="source-line-no">323</span><span id="line-323"> public void setReversed(boolean reversed) {</span>
+<span class="source-line-no">324</span><span id="line-324"> this.reversed = reversed;</span>
+<span class="source-line-no">325</span><span id="line-325"> }</span>
+<span class="source-line-no">326</span><span id="line-326"></span>
+<span class="source-line-no">327</span><span id="line-327"> public boolean isReversed() {</span>
+<span class="source-line-no">328</span><span id="line-328"> return this.reversed;</span>
+<span class="source-line-no">329</span><span id="line-329"> }</span>
+<span class="source-line-no">330</span><span id="line-330">}</span>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/filter/FilterList.Operator.html b/devapidocs/src-html/org/apache/hadoop/hbase/filter/FilterList.Operator.html
index 70b43734f06..e61377ab5e4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/filter/FilterList.Operator.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/filter/FilterList.Operator.html
@@ -256,37 +256,47 @@
<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">245</span><span id="line-245"> @Override</span>
-<span class="source-line-no">246</span><span id="line-246"> public boolean isFamilyEssential(byte[] name) throws IOException {</span>
-<span class="source-line-no">247</span><span id="line-247"> return this.filterListBase.isFamilyEssential(name);</span>
+<span class="source-line-no">246</span><span id="line-246"> public Cell getHintForRejectedRow(Cell firstRowCell) throws IOException {</span>
+<span class="source-line-no">247</span><span id="line-247"> return this.filterListBase.getHintForRejectedRow(firstRowCell);</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"> @Override</span>
-<span class="source-line-no">251</span><span id="line-251"> public void setReversed(boolean reversed) {</span>
-<span class="source-line-no">252</span><span id="line-252"> this.reversed = reversed;</span>
-<span class="source-line-no">253</span><span id="line-253"> this.filterListBase.setReversed(reversed);</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"> @Override</span>
-<span class="source-line-no">257</span><span id="line-257"> public boolean isReversed() {</span>
-<span class="source-line-no">258</span><span id="line-258"> assert this.reversed == this.filterListBase.isReversed();</span>
-<span class="source-line-no">259</span><span id="line-259"> return this.reversed;</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"> @Override</span>
-<span class="source-line-no">263</span><span id="line-263"> public String toString() {</span>
-<span class="source-line-no">264</span><span id="line-264"> return this.filterListBase.toString();</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"> @Override</span>
-<span class="source-line-no">268</span><span id="line-268"> public boolean equals(Object obj) {</span>
-<span class="source-line-no">269</span><span id="line-269"> return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);</span>
+<span class="source-line-no">251</span><span id="line-251"> public Cell getSkipHint(Cell skippedCell) throws IOException {</span>
+<span class="source-line-no">252</span><span id="line-252"> return this.filterListBase.getSkipHint(skippedCell);</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"> @Override</span>
+<span class="source-line-no">256</span><span id="line-256"> public boolean isFamilyEssential(byte[] name) throws IOException {</span>
+<span class="source-line-no">257</span><span id="line-257"> return this.filterListBase.isFamilyEssential(name);</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"> @Override</span>
+<span class="source-line-no">261</span><span id="line-261"> public void setReversed(boolean reversed) {</span>
+<span class="source-line-no">262</span><span id="line-262"> this.reversed = reversed;</span>
+<span class="source-line-no">263</span><span id="line-263"> this.filterListBase.setReversed(reversed);</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"> @Override</span>
+<span class="source-line-no">267</span><span id="line-267"> public boolean isReversed() {</span>
+<span class="source-line-no">268</span><span id="line-268"> assert this.reversed == this.filterListBase.isReversed();</span>
+<span class="source-line-no">269</span><span id="line-269"> return this.reversed;</span>
<span class="source-line-no">270</span><span id="line-270"> }</span>
<span class="source-line-no">271</span><span id="line-271"></span>
<span class="source-line-no">272</span><span id="line-272"> @Override</span>
-<span class="source-line-no">273</span><span id="line-273"> public int hashCode() {</span>
-<span class="source-line-no">274</span><span id="line-274"> return Objects.hash(getOperator(), getFilters());</span>
+<span class="source-line-no">273</span><span id="line-273"> public String toString() {</span>
+<span class="source-line-no">274</span><span id="line-274"> return this.filterListBase.toString();</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">276</span><span id="line-276"></span>
+<span class="source-line-no">277</span><span id="line-277"> @Override</span>
+<span class="source-line-no">278</span><span id="line-278"> public boolean equals(Object obj) {</span>
+<span class="source-line-no">279</span><span id="line-279"> return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);</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"> @Override</span>
+<span class="source-line-no">283</span><span id="line-283"> public int hashCode() {</span>
+<span class="source-line-no">284</span><span id="line-284"> return Objects.hash(getOperator(), getFilters());</span>
+<span class="source-line-no">285</span><span id="line-285"> }</span>
+<span class="source-line-no">286</span><span id="line-286">}</span>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/filter/FilterList.html b/devapidocs/src-html/org/apache/hadoop/hbase/filter/FilterList.html
index b412fb227e6..d931cb8b1a9 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/filter/FilterList.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/filter/FilterList.html
@@ -256,37 +256,47 @@
<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">245</span><span id="line-245"> @Override</span>
-<span class="source-line-no">246</span><span id="line-246"> public boolean isFamilyEssential(byte[] name) throws IOException {</span>
-<span class="source-line-no">247</span><span id="line-247"> return this.filterListBase.isFamilyEssential(name);</span>
+<span class="source-line-no">246</span><span id="line-246"> public Cell getHintForRejectedRow(Cell firstRowCell) throws IOException {</span>
+<span class="source-line-no">247</span><span id="line-247"> return this.filterListBase.getHintForRejectedRow(firstRowCell);</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"> @Override</span>
-<span class="source-line-no">251</span><span id="line-251"> public void setReversed(boolean reversed) {</span>
-<span class="source-line-no">252</span><span id="line-252"> this.reversed = reversed;</span>
-<span class="source-line-no">253</span><span id="line-253"> this.filterListBase.setReversed(reversed);</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"> @Override</span>
-<span class="source-line-no">257</span><span id="line-257"> public boolean isReversed() {</span>
-<span class="source-line-no">258</span><span id="line-258"> assert this.reversed == this.filterListBase.isReversed();</span>
-<span class="source-line-no">259</span><span id="line-259"> return this.reversed;</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"> @Override</span>
-<span class="source-line-no">263</span><span id="line-263"> public String toString() {</span>
-<span class="source-line-no">264</span><span id="line-264"> return this.filterListBase.toString();</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"> @Override</span>
-<span class="source-line-no">268</span><span id="line-268"> public boolean equals(Object obj) {</span>
-<span class="source-line-no">269</span><span id="line-269"> return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);</span>
+<span class="source-line-no">251</span><span id="line-251"> public Cell getSkipHint(Cell skippedCell) throws IOException {</span>
+<span class="source-line-no">252</span><span id="line-252"> return this.filterListBase.getSkipHint(skippedCell);</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"> @Override</span>
+<span class="source-line-no">256</span><span id="line-256"> public boolean isFamilyEssential(byte[] name) throws IOException {</span>
+<span class="source-line-no">257</span><span id="line-257"> return this.filterListBase.isFamilyEssential(name);</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"> @Override</span>
+<span class="source-line-no">261</span><span id="line-261"> public void setReversed(boolean reversed) {</span>
+<span class="source-line-no">262</span><span id="line-262"> this.reversed = reversed;</span>
+<span class="source-line-no">263</span><span id="line-263"> this.filterListBase.setReversed(reversed);</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"> @Override</span>
+<span class="source-line-no">267</span><span id="line-267"> public boolean isReversed() {</span>
+<span class="source-line-no">268</span><span id="line-268"> assert this.reversed == this.filterListBase.isReversed();</span>
+<span class="source-line-no">269</span><span id="line-269"> return this.reversed;</span>
<span class="source-line-no">270</span><span id="line-270"> }</span>
<span class="source-line-no">271</span><span id="line-271"></span>
<span class="source-line-no">272</span><span id="line-272"> @Override</span>
-<span class="source-line-no">273</span><span id="line-273"> public int hashCode() {</span>
-<span class="source-line-no">274</span><span id="line-274"> return Objects.hash(getOperator(), getFilters());</span>
+<span class="source-line-no">273</span><span id="line-273"> public String toString() {</span>
+<span class="source-line-no">274</span><span id="line-274"> return this.filterListBase.toString();</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">276</span><span id="line-276"></span>
+<span class="source-line-no">277</span><span id="line-277"> @Override</span>
+<span class="source-line-no">278</span><span id="line-278"> public boolean equals(Object obj) {</span>
+<span class="source-line-no">279</span><span id="line-279"> return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);</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"> @Override</span>
+<span class="source-line-no">283</span><span id="line-283"> public int hashCode() {</span>
+<span class="source-line-no">284</span><span id="line-284"> return Objects.hash(getOperator(), getFilters());</span>
+<span class="source-line-no">285</span><span id="line-285"> }</span>
+<span class="source-line-no">286</span><span id="line-286">}</span>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html b/devapidocs/src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html
index 9c3806904af..94ed173060a 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/filter/FilterListWithAND.html
@@ -32,322 +32,388 @@
<span class="source-line-no">019</span><span id="line-19"></span>
<span class="source-line-no">020</span><span id="line-20">import java.io.IOException;</span>
<span class="source-line-no">021</span><span id="line-21">import java.util.ArrayList;</span>
-<span class="source-line-no">022</span><span id="line-22">import java.util.Collections;</span>
-<span class="source-line-no">023</span><span id="line-23">import java.util.List;</span>
-<span class="source-line-no">024</span><span id="line-24">import java.util.Objects;</span>
-<span class="source-line-no">025</span><span id="line-25">import org.apache.hadoop.hbase.Cell;</span>
-<span class="source-line-no">026</span><span id="line-26">import org.apache.yetus.audience.InterfaceAudience;</span>
-<span class="source-line-no">027</span><span id="line-27"></span>
-<span class="source-line-no">028</span><span id="line-28">/**</span>
-<span class="source-line-no">029</span><span id="line-29"> * FilterListWithAND represents an ordered list of filters which will be evaluated with an AND</span>
-<span class="source-line-no">030</span><span id="line-30"> * operator.</span>
-<span class="source-line-no">031</span><span id="line-31"> */</span>
-<span class="source-line-no">032</span><span id="line-32">@InterfaceAudience.Private</span>
-<span class="source-line-no">033</span><span id="line-33">public class FilterListWithAND extends FilterListBase {</span>
-<span class="source-line-no">034</span><span id="line-34"></span>
-<span class="source-line-no">035</span><span id="line-35"> private List<Filter> seekHintFilters = new ArrayList<>();</span>
-<span class="source-line-no">036</span><span id="line-36"> private boolean[] hintingFilters;</span>
-<span class="source-line-no">037</span><span id="line-37"></span>
-<span class="source-line-no">038</span><span id="line-38"> public FilterListWithAND(List<Filter> filters) {</span>
-<span class="source-line-no">039</span><span id="line-39"> super(filters);</span>
-<span class="source-line-no">040</span><span id="line-40"> // For FilterList with AND, when call FL's transformCell(), we should transform cell for all</span>
-<span class="source-line-no">041</span><span id="line-41"> // sub-filters (because all sub-filters return INCLUDE*). So here, fill this array with true. we</span>
-<span class="source-line-no">042</span><span id="line-42"> // keep this in FilterListWithAND for abstracting the transformCell() in FilterListBase.</span>
-<span class="source-line-no">043</span><span id="line-43"> subFiltersIncludedCell = new ArrayList<>(Collections.nCopies(filters.size(), true));</span>
-<span class="source-line-no">044</span><span id="line-44"> cacheHintingFilters();</span>
-<span class="source-line-no">045</span><span id="line-45"> }</span>
-<span class="source-line-no">046</span><span id="line-46"></span>
-<span class="source-line-no">047</span><span id="line-47"> @Override</span>
-<span class="source-line-no">048</span><span id="line-48"> public void addFilterLists(List<Filter> filters) {</span>
-<span class="source-line-no">049</span><span id="line-49"> if (checkAndGetReversed(filters, isReversed()) != isReversed()) {</span>
-<span class="source-line-no">050</span><span id="line-50"> throw new IllegalArgumentException("Filters in the list must have the same reversed flag");</span>
-<span class="source-line-no">051</span><span id="line-51"> }</span>
-<span class="source-line-no">052</span><span id="line-52"> this.filters.addAll(filters);</span>
-<span class="source-line-no">053</span><span id="line-53"> this.subFiltersIncludedCell.addAll(Collections.nCopies(filters.size(), true));</span>
-<span class="source-line-no">054</span><span id="line-54"> this.cacheHintingFilters();</span>
-<span class="source-line-no">055</span><span id="line-55"> }</span>
-<span class="source-line-no">056</span><span id="line-56"></span>
-<span class="source-line-no">057</span><span id="line-57"> @Override</span>
-<span class="source-line-no">058</span><span id="line-58"> protected String formatLogFilters(List<Filter> logFilters) {</span>
-<span class="source-line-no">059</span><span id="line-59"> return String.format("FilterList AND (%d/%d): %s", logFilters.size(), this.size(),</span>
-<span class="source-line-no">060</span><span id="line-60"> logFilters.toString());</span>
-<span class="source-line-no">061</span><span id="line-61"> }</span>
-<span class="source-line-no">062</span><span id="line-62"></span>
-<span class="source-line-no">063</span><span id="line-63"> /**</span>
-<span class="source-line-no">064</span><span id="line-64"> * As checks for this are in the hot path, we want them as fast as possible, so we are caching the</span>
-<span class="source-line-no">065</span><span id="line-65"> * status in an array.</span>
-<span class="source-line-no">066</span><span id="line-66"> */</span>
-<span class="source-line-no">067</span><span id="line-67"> private void cacheHintingFilters() {</span>
-<span class="source-line-no">068</span><span id="line-68"> int filtersSize = filters.size();</span>
-<span class="source-line-no">069</span><span id="line-69"> hintingFilters = new boolean[filtersSize];</span>
-<span class="source-line-no">070</span><span id="line-70"> for (int i = 0; i < filtersSize; i++) {</span>
-<span class="source-line-no">071</span><span id="line-71"> if (filters.get(i) instanceof HintingFilter) {</span>
-<span class="source-line-no">072</span><span id="line-72"> hintingFilters[i] = true;</span>
-<span class="source-line-no">073</span><span id="line-73"> }</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"></span>
-<span class="source-line-no">077</span><span id="line-77"> /**</span>
-<span class="source-line-no">078</span><span id="line-78"> * FilterList with MUST_PASS_ALL choose the maximal forward step among sub-filters in filter list.</span>
-<span class="source-line-no">079</span><span id="line-79"> * Let's call it: The Maximal Step Rule. So if filter-A in filter list return INCLUDE and filter-B</span>
-<span class="source-line-no">080</span><span id="line-80"> * in filter list return INCLUDE_AND_NEXT_COL, then the filter list should return</span>
-<span class="source-line-no">081</span><span id="line-81"> * INCLUDE_AND_NEXT_COL. For SEEK_NEXT_USING_HINT, it's more special, and in method</span>
-<span class="source-line-no">082</span><span id="line-82"> * filterCellWithMustPassAll(), if any sub-filter return SEEK_NEXT_USING_HINT, then our filter</span>
-<span class="source-line-no">083</span><span id="line-83"> * list will return SEEK_NEXT_USING_HINT. so we don't care about the SEEK_NEXT_USING_HINT here.</span>
-<span class="source-line-no">084</span><span id="line-84"> * <br/></span>
-<span class="source-line-no">085</span><span id="line-85"> * <br/></span>
-<span class="source-line-no">086</span><span id="line-86"> * The jump step will be:</span>
-<span class="source-line-no">087</span><span id="line-87"> *</span>
-<span class="source-line-no">088</span><span id="line-88"> * <pre></span>
-<span class="source-line-no">089</span><span id="line-89"> * INCLUDE &lt; SKIP &lt; INCLUDE_AND_NEXT_COL &lt; NEXT_COL &lt; INCLUDE_AND_SEEK_NEXT_ROW &lt; NEXT_ROW</span>
-<span class="source-line-no">090</span><span id="line-90"> * &lt; SEEK_NEXT_USING_HINT</span>
-<span class="source-line-no">091</span><span id="line-91"> * </pre></span>
-<span class="source-line-no">092</span><span id="line-92"> *</span>
-<span class="source-line-no">093</span><span id="line-93"> * Here, we have the following map to describe The Maximal Step Rule. if current return code (for</span>
-<span class="source-line-no">094</span><span id="line-94"> * previous sub-filters in filter list) is <strong>ReturnCode</strong>, and current filter returns</span>
-<span class="source-line-no">095</span><span id="line-95"> * <strong>localRC</strong>, then we should return map[ReturnCode][localRC] for the merged result,</span>
-<span class="source-line-no">096</span><span id="line-96"> * according to The Maximal Step Rule. <br/></span>
-<span class="source-line-no">097</span><span id="line-97"> *</span>
-<span class="source-line-no">098</span><span id="line-98"> * <pre></span>
-<span class="source-line-no">099</span><span id="line-99"> * LocalCode\ReturnCode INCLUDE INCLUDE_AND_NEXT_COL INCLUDE_AND_SEEK_NEXT_ROW SKIP NEXT_COL NEXT_ROW SEEK_NEXT_USING_HINT</span>
-<span class="source-line-no">100</span><span id="line-100"> * INCLUDE INCLUDE INCLUDE_AND_NEXT_COL INCLUDE_AND_SEEK_NEXT_ROW SKIP NEXT_COL NEXT_ROW SEEK_NEXT_USING_HINT</span>
-<span class="source-line-no">101</span><span id="line-101"> * INCLUDE_AND_NEXT_COL INCLUDE_AND_NEXT_COL INCLUDE_AND_NEXT_COL INCLUDE_AND_SEEK_NEXT_ROW NEXT_COL NEXT_COL NEXT_ROW SEEK_NEXT_USING_HINT</span>
-<span class="source-line-no">102</span><span id="line-102"> * INCLUDE_AND_SEEK_NEXT_ROW INCLUDE_AND_SEEK_NEXT_ROW INCLUDE_AND_SEEK_NEXT_ROW INCLUDE_AND_SEEK_NEXT_ROW NEXT_ROW NEXT_ROW NEXT_ROW SEEK_NEXT_USING_HINT</span>
-<span class="source-line-no">103</span><span id="line-103"> * SKIP SKIP NEXT_COL NEXT_ROW SKIP NEXT_COL NEXT_ROW SEEK_NEXT_USING_HINT</span>
-<span class="source-line-no">104</span><span id="line-104"> * NEXT_COL NEXT_COL NEXT_COL NEXT_ROW NEXT_COL NEXT_COL NEXT_ROW SEEK_NEXT_USING_HINT</span>
-<span class="source-line-no">105</span><span id="line-105"> * NEXT_ROW NEXT_ROW NEXT_ROW NEXT_ROW NEXT_ROW NEXT_ROW NEXT_ROW SEEK_NEXT_USING_HINT</span>
-<span class="source-line-no">106</span><span id="line-106"> * SEEK_NEXT_USING_HINT SEEK_NEXT_USING_HINT SEEK_NEXT_USING_HINT SEEK_NEXT_USING_HINT SEEK_NEXT_USING_HINT SEEK_NEXT_USING_HINT SEEK_NEXT_USING_HINT SEEK_NEXT_USING_HINT</span>
-<span class="source-line-no">107</span><span id="line-107"> * </pre></span>
-<span class="source-line-no">108</span><span id="line-108"> *</span>
-<span class="source-line-no">109</span><span id="line-109"> * @param rc Return code which is calculated by previous sub-filter(s) in filter list.</span>
-<span class="source-line-no">110</span><span id="line-110"> * @param localRC Return code of the current sub-filter in filter list.</span>
-<span class="source-line-no">111</span><span id="line-111"> * @return Return code which is merged by the return code of previous sub-filter(s) and the return</span>
-<span class="source-line-no">112</span><span id="line-112"> * code of current sub-filter.</span>
-<span class="source-line-no">113</span><span id="line-113"> */</span>
-<span class="source-line-no">114</span><span id="line-114"> private ReturnCode mergeReturnCode(ReturnCode rc, ReturnCode localRC) {</span>
-<span class="source-line-no">115</span><span id="line-115"> if (rc == ReturnCode.SEEK_NEXT_USING_HINT) {</span>
-<span class="source-line-no">116</span><span id="line-116"> return ReturnCode.SEEK_NEXT_USING_HINT;</span>
-<span class="source-line-no">117</span><span id="line-117"> }</span>
-<span class="source-line-no">118</span><span id="line-118"> switch (localRC) {</span>
-<span class="source-line-no">119</span><span id="line-119"> case SEEK_NEXT_USING_HINT:</span>
-<span class="source-line-no">120</span><span id="line-120"> return ReturnCode.SEEK_NEXT_USING_HINT;</span>
-<span class="source-line-no">121</span><span id="line-121"> case INCLUDE:</span>
-<span class="source-line-no">122</span><span id="line-122"> return rc;</span>
-<span class="source-line-no">123</span><span id="line-123"> case INCLUDE_AND_NEXT_COL:</span>
-<span class="source-line-no">124</span><span id="line-124"> if (isInReturnCodes(rc, ReturnCode.INCLUDE, ReturnCode.INCLUDE_AND_NEXT_COL)) {</span>
-<span class="source-line-no">125</span><span id="line-125"> return ReturnCode.INCLUDE_AND_NEXT_COL;</span>
-<span class="source-line-no">126</span><span id="line-126"> }</span>
-<span class="source-line-no">127</span><span id="line-127"> if (isInReturnCodes(rc, ReturnCode.INCLUDE_AND_SEEK_NEXT_ROW)) {</span>
-<span class="source-line-no">128</span><span id="line-128"> return ReturnCode.INCLUDE_AND_SEEK_NEXT_ROW;</span>
-<span class="source-line-no">129</span><span id="line-129"> }</span>
-<span class="source-line-no">130</span><span id="line-130"> if (isInReturnCodes(rc, ReturnCode.SKIP, ReturnCode.NEXT_COL)) {</span>
-<span class="source-line-no">131</span><span id="line-131"> return ReturnCode.NEXT_COL;</span>
-<span class="source-line-no">132</span><span id="line-132"> }</span>
-<span class="source-line-no">133</span><span id="line-133"> if (isInReturnCodes(rc, ReturnCode.NEXT_ROW)) {</span>
-<span class="source-line-no">134</span><span id="line-134"> return ReturnCode.NEXT_ROW;</span>
+<span class="source-line-no">022</span><span id="line-22">import java.util.Arrays;</span>
+<span class="source-line-no">023</span><span id="line-23">import java.util.Collections;</span>
+<span class="source-line-no">024</span><span id="line-24">import java.util.List;</span>
+<span class="source-line-no">025</span><span id="line-25">import java.util.Objects;</span>
+<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.hbase.Cell;</span>
+<span class="source-line-no">027</span><span id="line-27">import org.apache.yetus.audience.InterfaceAudience;</span>
+<span class="source-line-no">028</span><span id="line-28"></span>
+<span class="source-line-no">029</span><span id="line-29">/**</span>
+<span class="source-line-no">030</span><span id="line-30"> * FilterListWithAND represents an ordered list of filters which will be evaluated with an AND</span>
+<span class="source-line-no">031</span><span id="line-31"> * operator.</span>
+<span class="source-line-no">032</span><span id="line-32"> */</span>
+<span class="source-line-no">033</span><span id="line-33">@InterfaceAudience.Private</span>
+<span class="source-line-no">034</span><span id="line-34">public class FilterListWithAND extends FilterListBase {</span>
+<span class="source-line-no">035</span><span id="line-35"></span>
+<span class="source-line-no">036</span><span id="line-36"> private List<Filter> seekHintFilters = new ArrayList<>();</span>
+<span class="source-line-no">037</span><span id="line-37"> private boolean[] hintingFilters;</span>
+<span class="source-line-no">038</span><span id="line-38"> /**</span>
+<span class="source-line-no">039</span><span id="line-39"> * Tracks which sub-filters returned {@code true} from {@link Filter#filterRowKey(Cell)}. Set in</span>
+<span class="source-line-no">040</span><span id="line-40"> * {@code filterRowKey()}, consumed by {@code getHintForRejectedRow()}, cleared only by</span>
+<span class="source-line-no">041</span><span id="line-41"> * {@code reset()} — callers must invoke {@code reset()} between rows to avoid stale state.</span>
+<span class="source-line-no">042</span><span id="line-42"> */</span>
+<span class="source-line-no">043</span><span id="line-43"> private boolean[] rejectedByFilterRowKey;</span>
+<span class="source-line-no">044</span><span id="line-44"></span>
+<span class="source-line-no">045</span><span id="line-45"> public FilterListWithAND(List<Filter> filters) {</span>
+<span class="source-line-no">046</span><span id="line-46"> super(filters);</span>
+<span class="source-line-no">047</span><span id="line-47"> // For FilterList with AND, when call FL's transformCell(), we should transform cell for all</span>
+<span class="source-line-no">048</span><span id="line-48"> // sub-filters (because all sub-filters return INCLUDE*). So here, fill this array with true. we</span>
+<span class="source-line-no">049</span><span id="line-49"> // keep this in FilterListWithAND for abstracting the transformCell() in FilterListBase.</span>
+<span class="source-line-no">050</span><span id="line-50"> subFiltersIncludedCell = new ArrayList<>(Collections.nCopies(filters.size(), true));</span>
+<span class="source-line-no">051</span><span id="line-51"> rejectedByFilterRowKey = new boolean[filters.size()];</span>
+<span class="source-line-no">052</span><span id="line-52"> cacheHintingFilters();</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 void addFilterLists(List<Filter> filters) {</span>
+<span class="source-line-no">057</span><span id="line-57"> if (checkAndGetReversed(filters, isReversed()) != isReversed()) {</span>
+<span class="source-line-no">058</span><span id="line-58"> throw new IllegalArgumentException("Filters in the list must have the same reversed flag");</span>
+<span class="source-line-no">059</span><span id="line-59"> }</span>
+<span class="source-line-no">060</span><span id="line-60"> this.filters.addAll(filters);</span>
+<span class="source-line-no">061</span><span id="line-61"> this.subFiltersIncludedCell.addAll(Collections.nCopies(filters.size(), true));</span>
+<span class="source-line-no">062</span><span id="line-62"> this.rejectedByFilterRowKey = Arrays.copyOf(this.rejectedByFilterRowKey, this.filters.size());</span>
+<span class="source-line-no">063</span><span id="line-63"> this.cacheHintingFilters();</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"> @Override</span>
+<span class="source-line-no">067</span><span id="line-67"> protected String formatLogFilters(List<Filter> logFilters) {</span>
+<span class="source-line-no">068</span><span id="line-68"> return String.format("FilterList AND (%d/%d): %s", logFilters.size(), this.size(),</span>
+<span class="source-line-no">069</span><span id="line-69"> logFilters.toString());</span>
+<span class="source-line-no">070</span><span id="line-70"> }</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"> * As checks for this are in the hot path, we want them as fast as possible, so we are caching the</span>
+<span class="source-line-no">074</span><span id="line-74"> * status in an array.</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 void cacheHintingFilters() {</span>
+<span class="source-line-no">077</span><span id="line-77"> int filtersSize = filters.size();</span>
+<span class="source-line-no">078</span><span id="line-78"> hintingFilters = new boolean[filtersSize];</span>
+<span class="source-line-no">079</span><span id="line-79"> for (int i = 0; i < filtersSize; i++) {</span>
+<span class="source-line-no">080</span><span id="line-80"> if (filters.get(i) instanceof HintingFilter) {</span>
+<span class="source-line-no">081</span><span id="line-81"> hintingFilters[i] = true;</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"> }</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"> * FilterList with MUST_PASS_ALL choose the maximal forward step among sub-filters in filter list.</span>
+<span class="source-line-no">088</span><span id="line-88"> * Let's call it: The Maximal Step Rule. So if filter-A in filter list return INCLUDE and filter-B</span>
+<span class="source-line-no">089</span><span id="line-89"> * in filter list return INCLUDE_AND_NEXT_COL, then the filter list should return</span>
+<span class="source-line-no">090</span><span id="line-90"> * INCLUDE_AND_NEXT_COL. For SEEK_NEXT_USING_HINT, it's more special, and in method</span>
+<span class="source-line-no">091</span><span id="line-91"> * filterCellWithMustPassAll(), if any sub-filter return SEEK_NEXT_USING_HINT, then our filter</span>
+<span class="source-line-no">092</span><span id="line-92"> * list will return SEEK_NEXT_USING_HINT. so we don't care about the SEEK_NEXT_USING_HINT here.</span>
+<span class="source-line-no">093</span><span id="line-93"> * <br/></span>
+<span class="source-line-no">094</span><span id="line-94"> * <br/></span>
+<span class="source-line-no">095</span><span id="line-95"> * The jump step will be:</span>
+<span class="source-line-no">096</span><span id="line-96"> *</span>
+<span class="source-line-no">097</span><span id="line-97"> * <pre></span>
+<span class="source-line-no">098</span><span id="line-98"> * INCLUDE &lt; SKIP &lt; INCLUDE_AND_NEXT_COL &lt; NEXT_COL &lt; INCLUDE_AND_SEEK_NEXT_ROW &lt; NEXT_ROW</span>
+<span class="source-line-no">099</span><span id="line-99"> * &lt; SEEK_NEXT_USING_HINT</span>
+<span class="source-line-no">100</span><span id="line-100"> * </pre></span>
+<span class="source-line-no">101</span><span id="line-101"> *</span>
+<span class="source-line-no">102</span><span id="line-102"> * Here, we have the following map to describe The Maximal Step Rule. if current return code (for</span>
+<span class="source-line-no">103</span><span id="line-103"> * previous sub-filters in filter list) is <strong>ReturnCode</strong>, and current filter returns</span>
+<span class="source-line-no">104</span><span id="line-104"> * <strong>localRC</strong>, then we should return map[ReturnCode][localRC] for the merged result,</span>
+<span class="source-line-no">105</span><span id="line-105"> * according to The Maximal Step Rule. <br/></span>
+<span class="source-line-no">106</span><span id="line-106"> *</span>
+<span class="source-line-no">107</span><span id="line-107"> * <pre></span>
+<span class="source-line-no">108</span><span id="line-108"> * LocalCode\ReturnCode INCLUDE INCLUDE_AND_NEXT_COL INCLUDE_AND_SEEK_NEXT_ROW SKIP NEXT_COL NEXT_ROW SEEK_NEXT_USING_HINT</span>
+<span class="source-line-no">109</span><span id="line-109"> * INCLUDE INCLUDE INCLUDE_AND_NEXT_COL INCLUDE_AND_SEEK_NEXT_ROW SKIP NEXT_COL NEXT_ROW SEEK_NEXT_USING_HINT</span>
+<span class="source-line-no">110</span><span id="line-110"> * INCLUDE_AND_NEXT_COL INCLUDE_AND_NEXT_COL INCLUDE_AND_NEXT_COL INCLUDE_AND_SEEK_NEXT_ROW NEXT_COL NEXT_COL NEXT_ROW SEEK_NEXT_USING_HINT</span>
+<span class="source-line-no">111</span><span id="line-111"> * INCLUDE_AND_SEEK_NEXT_ROW INCLUDE_AND_SEEK_NEXT_ROW INCLUDE_AND_SEEK_NEXT_ROW INCLUDE_AND_SEEK_NEXT_ROW NEXT_ROW NEXT_ROW NEXT_ROW SEEK_NEXT_USING_HINT</span>
+<span class="source-line-no">112</span><span id="line-112"> * SKIP SKIP NEXT_COL NEXT_ROW SKIP NEXT_COL NEXT_ROW SEEK_NEXT_USING_HINT</span>
+<span class="source-line-no">113</span><span id="line-113"> * NEXT_COL NEXT_COL NEXT_COL NEXT_ROW NEXT_COL NEXT_COL NEXT_ROW SEEK_NEXT_USING_HINT</span>
+<span class="source-line-no">114</span><span id="line-114"> * NEXT_ROW NEXT_ROW NEXT_ROW NEXT_ROW NEXT_ROW NEXT_ROW NEXT_ROW SEEK_NEXT_USING_HINT</span>
+<span class="source-line-no">115</span><span id="line-115"> * SEEK_NEXT_USING_HINT SEEK_NEXT_USING_HINT SEEK_NEXT_USING_HINT SEEK_NEXT_USING_HINT SEEK_NEXT_USING_HINT SEEK_NEXT_USING_HINT SEEK_NEXT_USING_HINT SEEK_NEXT_USING_HINT</span>
+<span class="source-line-no">116</span><span id="line-116"> * </pre></span>
+<span class="source-line-no">117</span><span id="line-117"> *</span>
+<span class="source-line-no">118</span><span id="line-118"> * @param rc Return code which is calculated by previous sub-filter(s) in filter list.</span>
+<span class="source-line-no">119</span><span id="line-119"> * @param localRC Return code of the current sub-filter in filter list.</span>
+<span class="source-line-no">120</span><span id="line-120"> * @return Return code which is merged by the return code of previous sub-filter(s) and the return</span>
+<span class="source-line-no">121</span><span id="line-121"> * code of current sub-filter.</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 ReturnCode mergeReturnCode(ReturnCode rc, ReturnCode localRC) {</span>
+<span class="source-line-no">124</span><span id="line-124"> if (rc == ReturnCode.SEEK_NEXT_USING_HINT) {</span>
+<span class="source-line-no">125</span><span id="line-125"> return ReturnCode.SEEK_NEXT_USING_HINT;</span>
+<span class="source-line-no">126</span><span id="line-126"> }</span>
+<span class="source-line-no">127</span><span id="line-127"> switch (localRC) {</span>
+<span class="source-line-no">128</span><span id="line-128"> case SEEK_NEXT_USING_HINT:</span>
+<span class="source-line-no">129</span><span id="line-129"> return ReturnCode.SEEK_NEXT_USING_HINT;</span>
+<span class="source-line-no">130</span><span id="line-130"> case INCLUDE:</span>
+<span class="source-line-no">131</span><span id="line-131"> return rc;</span>
+<span class="source-line-no">132</span><span id="line-132"> case INCLUDE_AND_NEXT_COL:</span>
+<span class="source-line-no">133</span><span id="line-133"> if (isInReturnCodes(rc, ReturnCode.INCLUDE, ReturnCode.INCLUDE_AND_NEXT_COL)) {</span>
+<span class="source-line-no">134</span><span id="line-134"> return ReturnCode.INCLUDE_AND_NEXT_COL;</span>
<span class="source-line-no">135</span><span id="line-135"> }</span>
-<span class="source-line-no">136</span><span id="line-136"> break;</span>
-<span class="source-line-no">137</span><span id="line-137"> case INCLUDE_AND_SEEK_NEXT_ROW:</span>
-<span class="source-line-no">138</span><span id="line-138"> if (</span>
-<span class="source-line-no">139</span><span id="line-139"> isInReturnCodes(rc, ReturnCode.INCLUDE, ReturnCode.INCLUDE_AND_NEXT_COL,</span>
-<span class="source-line-no">140</span><span id="line-140"> ReturnCode.INCLUDE_AND_SEEK_NEXT_ROW)</span>
-<span class="source-line-no">141</span><span id="line-141"> ) {</span>
-<span class="source-line-no">142</span><span id="line-142"> return ReturnCode.INCLUDE_AND_SEEK_NEXT_ROW;</span>
-<span class="source-line-no">143</span><span id="line-143"> }</span>
-<span class="source-line-no">144</span><span id="line-144"> if (isInReturnCodes(rc, ReturnCode.SKIP, ReturnCode.NEXT_COL, ReturnCode.NEXT_ROW)) {</span>
-<span class="source-line-no">145</span><span id="line-145"> return ReturnCode.NEXT_ROW;</span>
-<span class="source-line-no">146</span><span id="line-146"> }</span>
-<span class="source-line-no">147</span><span id="line-147"> break;</span>
-<span class="source-line-no">148</span><span id="line-148"> case SKIP:</span>
-<span class="source-line-no">149</span><span id="line-149"> if (isInReturnCodes(rc, ReturnCode.INCLUDE, ReturnCode.SKIP)) {</span>
-<span class="source-line-no">150</span><span id="line-150"> return ReturnCode.SKIP;</span>
-<span class="source-line-no">151</span><span id="line-151"> }</span>
-<span class="source-line-no">152</span><span id="line-152"> if (isInReturnCodes(rc, ReturnCode.INCLUDE_AND_NEXT_COL, ReturnCode.NEXT_COL)) {</span>
-<span class="source-line-no">153</span><span id="line-153"> return ReturnCode.NEXT_COL;</span>
-<span class="source-line-no">154</span><span id="line-154"> }</span>
-<span class="source-line-no">155</span><span id="line-155"> if (isInReturnCodes(rc, ReturnCode.INCLUDE_AND_SEEK_NEXT_ROW, ReturnCode.NEXT_ROW)) {</span>
-<span class="source-line-no">156</span><span id="line-156"> return ReturnCode.NEXT_ROW;</span>
-<span class="source-line-no">157</span><span id="line-157"> }</span>
-<span class="source-line-no">158</span><span id="line-158"> break;</span>
-<span class="source-line-no">159</span><span id="line-159"> case NEXT_COL:</span>
-<span class="source-line-no">160</span><span id="line-160"> if (</span>
-<span class="source-line-no">161</span><span id="line-161"> isInReturnCodes(rc, ReturnCode.INCLUDE, ReturnCode.INCLUDE_AND_NEXT_COL, ReturnCode.SKIP,</span>
-<span class="source-line-no">162</span><span id="line-162"> ReturnCode.NEXT_COL)</span>
-<span class="source-line-no">163</span><span id="line-163"> ) {</span>
-<span class="source-line-no">164</span><span id="line-164"> return ReturnCode.NEXT_COL;</span>
-<span class="source-line-no">165</span><span id="line-165"> }</span>
-<span class="source-line-no">166</span><span id="line-166"> if (isInReturnCodes(rc, ReturnCode.INCLUDE_AND_SEEK_NEXT_ROW, ReturnCode.NEXT_ROW)) {</span>
-<span class="source-line-no">167</span><span id="line-167"> return ReturnCode.NEXT_ROW;</span>
-<span class="source-line-no">168</span><span id="line-168"> }</span>
-<span class="source-line-no">169</span><span id="line-169"> break;</span>
-<span class="source-line-no">170</span><span id="line-170"> case NEXT_ROW:</span>
-<span class="source-line-no">171</span><span id="line-171"> return ReturnCode.NEXT_ROW;</span>
-<span class="source-line-no">172</span><span id="line-172"> }</span>
-<span class="source-line-no">173</span><span id="line-173"> throw new IllegalStateException(</span>
-<span class="source-line-no">174</span><span id="line-174"> "Received code is not valid. rc: " + rc + ", localRC: " + localRC);</span>
-<span class="source-line-no">175</span><span id="line-175"> }</span>
-<span class="source-line-no">176</span><span id="line-176"></span>
-<span class="source-line-no">177</span><span id="line-177"> private boolean isIncludeRelatedReturnCode(ReturnCode rc) {</span>
-<span class="source-line-no">178</span><span id="line-178"> return isInReturnCodes(rc, ReturnCode.INCLUDE, ReturnCode.INCLUDE_AND_NEXT_COL,</span>
-<span class="source-line-no">179</span><span id="line-179"> ReturnCode.INCLUDE_AND_SEEK_NEXT_ROW);</span>
-<span class="source-line-no">180</span><span id="line-180"> }</span>
-<span class="source-line-no">181</span><span id="line-181"></span>
-<span class="source-line-no">182</span><span id="line-182"> @Override</span>
-<span class="source-line-no">183</span><span id="line-183"> public ReturnCode filterCell(Cell c) throws IOException {</span>
-<span class="source-line-no">184</span><span id="line-184"> if (isEmpty()) {</span>
-<span class="source-line-no">185</span><span id="line-185"> return ReturnCode.INCLUDE;</span>
-<span class="source-line-no">186</span><span id="line-186"> }</span>
-<span class="source-line-no">187</span><span id="line-187"> ReturnCode rc = ReturnCode.INCLUDE;</span>
-<span class="source-line-no">188</span><span id="line-188"> this.seekHintFilters.clear();</span>
-<span class="source-line-no">189</span><span id="line-189"> int i = 0;</span>
-<span class="source-line-no">190</span><span id="line-190"> int n = filters.size();</span>
-<span class="source-line-no">191</span><span id="line-191"> for (; i < n; i++) {</span>
-<span class="source-line-no">192</span><span id="line-192"> Filter filter = filters.get(i);</span>
-<span class="source-line-no">193</span><span id="line-193"> if (filter.filterAllRemaining()) {</span>
-<span class="source-line-no">194</span><span id="line-194"> rc = ReturnCode.NEXT_ROW;</span>
-<span class="source-line-no">195</span><span id="line-195"> // See comment right after this loop</span>
-<span class="source-line-no">196</span><span id="line-196"> break;</span>
-<span class="source-line-no">197</span><span id="line-197"> }</span>
-<span class="source-line-no">198</span><span id="line-198"> ReturnCode localRC;</span>
-<span class="source-line-no">199</span><span id="line-199"> localRC = filter.filterCell(c);</span>
-<span class="source-line-no">200</span><span id="line-200"> if (localRC == ReturnCode.SEEK_NEXT_USING_HINT) {</span>
-<span class="source-line-no">201</span><span id="line-201"> seekHintFilters.add(filter);</span>
-<span class="source-line-no">202</span><span id="line-202"> }</span>
-<span class="source-line-no">203</span><span id="line-203"> rc = mergeReturnCode(rc, localRC);</span>
-<span class="source-line-no">204</span><span id="line-204"> // Only when rc is INCLUDE* case, we should pass the cell to the following sub-filters.</span>
-<span class="source-line-no">205</span><span id="line-205"> // otherwise we may mess up the global state (such as offset, count..) in the following</span>
-<span class="source-line-no">206</span><span id="line-206"> // sub-filters. (HBASE-20565)</span>
-<span class="source-line-no">207</span><span id="line-207"> if (!isIncludeRelatedReturnCode(rc)) {</span>
-<span class="source-line-no">208</span><span id="line-208"> // See comment right after this loop</span>
-<span class="source-line-no">209</span><span id="line-209"> break;</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"> // We have the preliminary return code. However, if there are remaining uncalled hintingFilters,</span>
-<span class="source-line-no">213</span><span id="line-213"> // they may return hints that allow us to seek ahead and skip reading and processing a lot of</span>
-<span class="source-line-no">214</span><span id="line-214"> // cells.</span>
-<span class="source-line-no">215</span><span id="line-215"> // Process the remaining hinting filters so that we can get all seek hints.</span>
-<span class="source-line-no">216</span><span id="line-216"> // The farthest key is computed in getNextCellHint()</span>
-<span class="source-line-no">217</span><span id="line-217"> if (++i < n) {</span>
-<span class="source-line-no">218</span><span id="line-218"> for (; i < n; i++) {</span>
-<span class="source-line-no">219</span><span id="line-219"> if (hintingFilters[i]) {</span>
-<span class="source-line-no">220</span><span id="line-220"> Filter filter = filters.get(i);</span>
-<span class="source-line-no">221</span><span id="line-221"> if (filter.filterCell(c) == ReturnCode.SEEK_NEXT_USING_HINT) {</span>
-<span class="source-line-no">222</span><span id="line-222"> seekHintFilters.add(filter);</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"> }</span>
-<span class="source-line-no">227</span><span id="line-227"></span>
-<span class="source-line-no">228</span><span id="line-228"> if (!seekHintFilters.isEmpty()) {</span>
-<span class="source-line-no">229</span><span id="line-229"> return ReturnCode.SEEK_NEXT_USING_HINT;</span>
-<span class="source-line-no">230</span><span id="line-230"> }</span>
-<span class="source-line-no">231</span><span id="line-231"> return rc;</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 reset() throws IOException {</span>
-<span class="source-line-no">236</span><span id="line-236"> for (int i = 0, n = filters.size(); i < n; i++) {</span>
-<span class="source-line-no">237</span><span id="line-237"> filters.get(i).reset();</span>
-<span class="source-line-no">238</span><span id="line-238"> }</span>
-<span class="source-line-no">239</span><span id="line-239"> seekHintFilters.clear();</span>
-<span class="source-line-no">240</span><span id="line-240"> }</span>
-<span class="source-line-no">241</span><span id="line-241"></span>
-<span class="source-line-no">242</span><span id="line-242"> @Override</span>
-<span class="source-line-no">243</span><span id="line-243"> public boolean filterRowKey(Cell firstRowCell) throws IOException {</span>
-<span class="source-line-no">244</span><span id="line-244"> if (isEmpty()) {</span>
-<span class="source-line-no">245</span><span id="line-245"> return super.filterRowKey(firstRowCell);</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 anyRowKeyFiltered = false;</span>
-<span class="source-line-no">248</span><span id="line-248"> boolean anyHintingPassed = false;</span>
-<span class="source-line-no">249</span><span id="line-249"> for (int i = 0, n = filters.size(); i < n; i++) {</span>
-<span class="source-line-no">250</span><span id="line-250"> Filter filter = filters.get(i);</span>
-<span class="source-line-no">251</span><span id="line-251"> if (filter.filterAllRemaining()) {</span>
-<span class="source-line-no">252</span><span id="line-252"> // We don't need to care about any later filters, as we end the scan immediately.</span>
-<span class="source-line-no">253</span><span id="line-253"> // TODO HBASE-28633 in the normal code path, filterAllRemaining() always gets checked</span>
-<span class="source-line-no">254</span><span id="line-254"> // before filterRowKey(). We should be able to remove this check.</span>
-<span class="source-line-no">255</span><span id="line-255"> return true;</span>
-<span class="source-line-no">256</span><span id="line-256"> } else if (filter.filterRowKey(firstRowCell)) {</span>
-<span class="source-line-no">257</span><span id="line-257"> // Can't just return true here, because there are some filters (such as PrefixFilter) which</span>
-<span class="source-line-no">258</span><span id="line-258"> // will catch the row changed event by filterRowKey(). If we return early here, those</span>
-<span class="source-line-no">259</span><span id="line-259"> // filters will have no chance to update their row state.</span>
-<span class="source-line-no">260</span><span id="line-260"> anyRowKeyFiltered = true;</span>
-<span class="source-line-no">261</span><span id="line-261"> } else if (hintingFilters[i]) {</span>
-<span class="source-line-no">262</span><span id="line-262"> // If filterRowKey returns false and this is a hinting filter, then we must not filter this</span>
-<span class="source-line-no">263</span><span id="line-263"> // rowkey.</span>
-<span class="source-line-no">264</span><span id="line-264"> // Otherwise this sub-filter doesn't get a chance to provide a seek hint, and the scan may</span>
-<span class="source-line-no">265</span><span id="line-265"> // regress into a full scan.</span>
-<span class="source-line-no">266</span><span id="line-266"> anyHintingPassed = true;</span>
-<span class="source-line-no">267</span><span id="line-267"> }</span>
-<span class="source-line-no">268</span><span id="line-268"> }</span>
-<span class="source-line-no">269</span><span id="line-269"> return anyRowKeyFiltered && !anyHintingPassed;</span>
-<span class="source-line-no">270</span><span id="line-270"> }</span>
-<span class="source-line-no">271</span><span id="line-271"></span>
-<span class="source-line-no">272</span><span id="line-272"> @Override</span>
-<span class="source-line-no">273</span><span id="line-273"> public boolean filterAllRemaining() throws IOException {</span>
-<span class="source-line-no">274</span><span id="line-274"> if (isEmpty()) {</span>
-<span class="source-line-no">275</span><span id="line-275"> return super.filterAllRemaining();</span>
-<span class="source-line-no">276</span><span id="line-276"> }</span>
-<span class="source-line-no">277</span><span id="line-277"> for (int i = 0, n = filters.size(); i < n; i++) {</span>
-<span class="source-line-no">278</span><span id="line-278"> if (filters.get(i).filterAllRemaining()) {</span>
-<span class="source-line-no">279</span><span id="line-279"> return true;</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"> return false;</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 boolean filterRow() throws IOException {</span>
-<span class="source-line-no">287</span><span id="line-287"> if (isEmpty()) {</span>
-<span class="source-line-no">288</span><span id="line-288"> return super.filterRow();</span>
-<span class="source-line-no">289</span><span id="line-289"> }</span>
-<span class="source-line-no">290</span><span id="line-290"> for (int i = 0, n = filters.size(); i < n; i++) {</span>
-<span class="source-line-no">291</span><span id="line-291"> Filter filter = filters.get(i);</span>
-<span class="source-line-no">292</span><span id="line-292"> if (filter.filterRow()) {</span>
-<span class="source-line-no">293</span><span id="line-293"> return true;</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"> return false;</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"> @Override</span>
-<span class="source-line-no">300</span><span id="line-300"> public Cell getNextCellHint(Cell currentCell) throws IOException {</span>
-<span class="source-line-no">301</span><span id="line-301"> if (isEmpty()) {</span>
-<span class="source-line-no">302</span><span id="line-302"> return super.getNextCellHint(currentCell);</span>
-<span class="source-line-no">303</span><span id="line-303"> }</span>
-<span class="source-line-no">304</span><span id="line-304"> Cell maxHint = null;</span>
-<span class="source-line-no">305</span><span id="line-305"> for (Filter filter : seekHintFilters) {</span>
-<span class="source-line-no">306</span><span id="line-306"> if (filter.filterAllRemaining()) {</span>
-<span class="source-line-no">307</span><span id="line-307"> continue;</span>
-<span class="source-line-no">308</span><span id="line-308"> }</span>
-<span class="source-line-no">309</span><span id="line-309"> Cell curKeyHint = filter.getNextCellHint(currentCell);</span>
-<span class="source-line-no">310</span><span id="line-310"> if (maxHint == null) {</span>
-<span class="source-line-no">311</span><span id="line-311"> maxHint = curKeyHint;</span>
-<span class="source-line-no">312</span><span id="line-312"> continue;</span>
-<span class="source-line-no">313</span><span id="line-313"> }</span>
-<span class="source-line-no">314</span><span id="line-314"> if (this.compareCell(maxHint, curKeyHint) < 0) {</span>
-<span class="source-line-no">315</span><span id="line-315"> maxHint = curKeyHint;</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"> return maxHint;</span>
-<span class="source-line-no">319</span><span id="line-319"> }</span>
-<span class="source-line-no">320</span><span id="line-320"></span>
-<span class="source-line-no">321</span><span id="line-321"> @Override</span>
-<span class="source-line-no">322</span><span id="line-322"> public boolean equals(Object obj) {</span>
-<span class="source-line-no">323</span><span id="line-323"> if (this == obj) {</span>
-<span class="source-line-no">324</span><span id="line-324"> return true;</span>
-<span class="source-line-no">325</span><span id="line-325"> }</span>
-<span class="source-line-no">326</span><span id="line-326"> if (!(obj instanceof FilterListWithAND)) {</span>
-<span class="source-line-no">327</span><span id="line-327"> return false;</span>
-<span class="source-line-no">328</span><span id="line-328"> }</span>
-<span class="source-line-no">329</span><span id="line-329"> FilterListWithAND f = (FilterListWithAND) obj;</span>
-<span class="source-line-no">330</span><span id="line-330"> return this.filters.equals(f.getFilters()) && this.seekHintFilters.equals(f.seekHintFilters);</span>
+<span class="source-line-no">136</span><span id="line-136"> if (isInReturnCodes(rc, ReturnCode.INCLUDE_AND_SEEK_NEXT_ROW)) {</span>
+<span class="source-line-no">137</span><span id="line-137"> return ReturnCode.INCLUDE_AND_SEEK_NEXT_ROW;</span>
+<span class="source-line-no">138</span><span id="line-138"> }</span>
+<span class="source-line-no">139</span><span id="line-139"> if (isInReturnCodes(rc, ReturnCode.SKIP, ReturnCode.NEXT_COL)) {</span>
+<span class="source-line-no">140</span><span id="line-140"> return ReturnCode.NEXT_COL;</span>
+<span class="source-line-no">141</span><span id="line-141"> }</span>
+<span class="source-line-no">142</span><span id="line-142"> if (isInReturnCodes(rc, ReturnCode.NEXT_ROW)) {</span>
+<span class="source-line-no">143</span><span id="line-143"> return ReturnCode.NEXT_ROW;</span>
+<span class="source-line-no">144</span><span id="line-144"> }</span>
+<span class="source-line-no">145</span><span id="line-145"> break;</span>
+<span class="source-line-no">146</span><span id="line-146"> case INCLUDE_AND_SEEK_NEXT_ROW:</span>
+<span class="source-line-no">147</span><span id="line-147"> if (</span>
+<span class="source-line-no">148</span><span id="line-148"> isInReturnCodes(rc, ReturnCode.INCLUDE, ReturnCode.INCLUDE_AND_NEXT_COL,</span>
+<span class="source-line-no">149</span><span id="line-149"> ReturnCode.INCLUDE_AND_SEEK_NEXT_ROW)</span>
+<span class="source-line-no">150</span><span id="line-150"> ) {</span>
+<span class="source-line-no">151</span><span id="line-151"> return ReturnCode.INCLUDE_AND_SEEK_NEXT_ROW;</span>
+<span class="source-line-no">152</span><span id="line-152"> }</span>
+<span class="source-line-no">153</span><span id="line-153"> if (isInReturnCodes(rc, ReturnCode.SKIP, ReturnCode.NEXT_COL, ReturnCode.NEXT_ROW)) {</span>
+<span class="source-line-no">154</span><span id="line-154"> return ReturnCode.NEXT_ROW;</span>
+<span class="source-line-no">155</span><span id="line-155"> }</span>
+<span class="source-line-no">156</span><span id="line-156"> break;</span>
+<span class="source-line-no">157</span><span id="line-157"> case SKIP:</span>
+<span class="source-line-no">158</span><span id="line-158"> if (isInReturnCodes(rc, ReturnCode.INCLUDE, ReturnCode.SKIP)) {</span>
+<span class="source-line-no">159</span><span id="line-159"> return ReturnCode.SKIP;</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 (isInReturnCodes(rc, ReturnCode.INCLUDE_AND_NEXT_COL, ReturnCode.NEXT_COL)) {</span>
+<span class="source-line-no">162</span><span id="line-162"> return ReturnCode.NEXT_COL;</span>
+<span class="source-line-no">163</span><span id="line-163"> }</span>
+<span class="source-line-no">164</span><span id="line-164"> if (isInReturnCodes(rc, ReturnCode.INCLUDE_AND_SEEK_NEXT_ROW, ReturnCode.NEXT_ROW)) {</span>
+<span class="source-line-no">165</span><span id="line-165"> return ReturnCode.NEXT_ROW;</span>
+<span class="source-line-no">166</span><span id="line-166"> }</span>
+<span class="source-line-no">167</span><span id="line-167"> break;</span>
+<span class="source-line-no">168</span><span id="line-168"> case NEXT_COL:</span>
+<span class="source-line-no">169</span><span id="line-169"> if (</span>
+<span class="source-line-no">170</span><span id="line-170"> isInReturnCodes(rc, ReturnCode.INCLUDE, ReturnCode.INCLUDE_AND_NEXT_COL, ReturnCode.SKIP,</span>
+<span class="source-line-no">171</span><span id="line-171"> ReturnCode.NEXT_COL)</span>
+<span class="source-line-no">172</span><span id="line-172"> ) {</span>
+<span class="source-line-no">173</span><span id="line-173"> return ReturnCode.NEXT_COL;</span>
+<span class="source-line-no">174</span><span id="line-174"> }</span>
+<span class="source-line-no">175</span><span id="line-175"> if (isInReturnCodes(rc, ReturnCode.INCLUDE_AND_SEEK_NEXT_ROW, ReturnCode.NEXT_ROW)) {</span>
+<span class="source-line-no">176</span><span id="line-176"> return ReturnCode.NEXT_ROW;</span>
+<span class="source-line-no">177</span><span id="line-177"> }</span>
+<span class="source-line-no">178</span><span id="line-178"> break;</span>
+<span class="source-line-no">179</span><span id="line-179"> case NEXT_ROW:</span>
+<span class="source-line-no">180</span><span id="line-180"> return ReturnCode.NEXT_ROW;</span>
+<span class="source-line-no">181</span><span id="line-181"> }</span>
+<span class="source-line-no">182</span><span id="line-182"> throw new IllegalStateException(</span>
+<span class="source-line-no">183</span><span id="line-183"> "Received code is not valid. rc: " + rc + ", localRC: " + localRC);</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"> private boolean isIncludeRelatedReturnCode(ReturnCode rc) {</span>
+<span class="source-line-no">187</span><span id="line-187"> return isInReturnCodes(rc, ReturnCode.INCLUDE, ReturnCode.INCLUDE_AND_NEXT_COL,</span>
+<span class="source-line-no">188</span><span id="line-188"> ReturnCode.INCLUDE_AND_SEEK_NEXT_ROW);</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 ReturnCode filterCell(Cell c) throws IOException {</span>
+<span class="source-line-no">193</span><span id="line-193"> if (isEmpty()) {</span>
+<span class="source-line-no">194</span><span id="line-194"> return ReturnCode.INCLUDE;</span>
+<span class="source-line-no">195</span><span id="line-195"> }</span>
+<span class="source-line-no">196</span><span id="line-196"> ReturnCode rc = ReturnCode.INCLUDE;</span>
+<span class="source-line-no">197</span><span id="line-197"> this.seekHintFilters.clear();</span>
+<span class="source-line-no">198</span><span id="line-198"> int i = 0;</span>
+<span class="source-line-no">199</span><span id="line-199"> int n = filters.size();</span>
+<span class="source-line-no">200</span><span id="line-200"> for (; i < n; i++) {</span>
+<span class="source-line-no">201</span><span id="line-201"> Filter filter = filters.get(i);</span>
+<span class="source-line-no">202</span><span id="line-202"> if (filter.filterAllRemaining()) {</span>
+<span class="source-line-no">203</span><span id="line-203"> rc = ReturnCode.NEXT_ROW;</span>
+<span class="source-line-no">204</span><span id="line-204"> // See comment right after this loop</span>
+<span class="source-line-no">205</span><span id="line-205"> break;</span>
+<span class="source-line-no">206</span><span id="line-206"> }</span>
+<span class="source-line-no">207</span><span id="line-207"> ReturnCode localRC;</span>
+<span class="source-line-no">208</span><span id="line-208"> localRC = filter.filterCell(c);</span>
+<span class="source-line-no">209</span><span id="line-209"> if (localRC == ReturnCode.SEEK_NEXT_USING_HINT) {</span>
+<span class="source-line-no">210</span><span id="line-210"> seekHintFilters.add(filter);</span>
+<span class="source-line-no">211</span><span id="line-211"> }</span>
+<span class="source-line-no">212</span><span id="line-212"> rc = mergeReturnCode(rc, localRC);</span>
+<span class="source-line-no">213</span><span id="line-213"> // Only when rc is INCLUDE* case, we should pass the cell to the following sub-filters.</span>
+<span class="source-line-no">214</span><span id="line-214"> // otherwise we may mess up the global state (such as offset, count..) in the following</span>
+<span class="source-line-no">215</span><span id="line-215"> // sub-filters. (HBASE-20565)</span>
+<span class="source-line-no">216</span><span id="line-216"> if (!isIncludeRelatedReturnCode(rc)) {</span>
+<span class="source-line-no">217</span><span id="line-217"> // See comment right after this loop</span>
+<span class="source-line-no">218</span><span id="line-218"> break;</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"> // We have the preliminary return code. However, if there are remaining uncalled hintingFilters,</span>
+<span class="source-line-no">222</span><span id="line-222"> // they may return hints that allow us to seek ahead and skip reading and processing a lot of</span>
+<span class="source-line-no">223</span><span id="line-223"> // cells.</span>
+<span class="source-line-no">224</span><span id="line-224"> // Process the remaining hinting filters so that we can get all seek hints.</span>
+<span class="source-line-no">225</span><span id="line-225"> // The farthest key is computed in getNextCellHint()</span>
+<span class="source-line-no">226</span><span id="line-226"> if (++i < n) {</span>
+<span class="source-line-no">227</span><span id="line-227"> for (; i < n; i++) {</span>
+<span class="source-line-no">228</span><span id="line-228"> if (hintingFilters[i]) {</span>
+<span class="source-line-no">229</span><span id="line-229"> Filter filter = filters.get(i);</span>
+<span class="source-line-no">230</span><span id="line-230"> if (filter.filterCell(c) == ReturnCode.SEEK_NEXT_USING_HINT) {</span>
+<span class="source-line-no">231</span><span id="line-231"> seekHintFilters.add(filter);</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"> }</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"> if (!seekHintFilters.isEmpty()) {</span>
+<span class="source-line-no">238</span><span id="line-238"> return ReturnCode.SEEK_NEXT_USING_HINT;</span>
+<span class="source-line-no">239</span><span id="line-239"> }</span>
+<span class="source-line-no">240</span><span id="line-240"> return rc;</span>
+<span class="source-line-no">241</span><span id="line-241"> }</span>
+<span class="source-line-no">242</span><span id="line-242"></span>
+<span class="source-line-no">243</span><span id="line-243"> @Override</span>
+<span class="source-line-no">244</span><span id="line-244"> public void reset() throws IOException {</span>
+<span class="source-line-no">245</span><span id="line-245"> for (int i = 0, n = filters.size(); i < n; i++) {</span>
+<span class="source-line-no">246</span><span id="line-246"> filters.get(i).reset();</span>
+<span class="source-line-no">247</span><span id="line-247"> }</span>
+<span class="source-line-no">248</span><span id="line-248"> seekHintFilters.clear();</span>
+<span class="source-line-no">249</span><span id="line-249"> Arrays.fill(rejectedByFilterRowKey, 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"> @Override</span>
+<span class="source-line-no">253</span><span id="line-253"> public boolean filterRowKey(Cell firstRowCell) throws IOException {</span>
+<span class="source-line-no">254</span><span id="line-254"> if (isEmpty()) {</span>
+<span class="source-line-no">255</span><span id="line-255"> return super.filterRowKey(firstRowCell);</span>
+<span class="source-line-no">256</span><span id="line-256"> }</span>
+<span class="source-line-no">257</span><span id="line-257"> Arrays.fill(rejectedByFilterRowKey, false);</span>
+<span class="source-line-no">258</span><span id="line-258"> boolean anyRowKeyFiltered = false;</span>
+<span class="source-line-no">259</span><span id="line-259"> boolean anyHintingPassed = false;</span>
+<span class="source-line-no">260</span><span id="line-260"> for (int i = 0, n = filters.size(); i < n; i++) {</span>
+<span class="source-line-no">261</span><span id="line-261"> Filter filter = filters.get(i);</span>
+<span class="source-line-no">262</span><span id="line-262"> if (filter.filterAllRemaining()) {</span>
+<span class="source-line-no">263</span><span id="line-263"> // We don't need to care about any later filters, as we end the scan immediately.</span>
+<span class="source-line-no">264</span><span id="line-264"> // TODO HBASE-28633 in the normal code path, filterAllRemaining() always gets checked</span>
+<span class="source-line-no">265</span><span id="line-265"> // before filterRowKey(). We should be able to remove this check.</span>
+<span class="source-line-no">266</span><span id="line-266"> return true;</span>
+<span class="source-line-no">267</span><span id="line-267"> } else if (filter.filterRowKey(firstRowCell)) {</span>
+<span class="source-line-no">268</span><span id="line-268"> // Can't just return true here, because there are some filters (such as PrefixFilter) which</span>
+<span class="source-line-no">269</span><span id="line-269"> // will catch the row changed event by filterRowKey(). If we return early here, those</span>
+<span class="source-line-no">270</span><span id="line-270"> // filters will have no chance to update their row state.</span>
+<span class="source-line-no">271</span><span id="line-271"> anyRowKeyFiltered = true;</span>
+<span class="source-line-no">272</span><span id="line-272"> rejectedByFilterRowKey[i] = true;</span>
+<span class="source-line-no">273</span><span id="line-273"> } else if (hintingFilters[i]) {</span>
+<span class="source-line-no">274</span><span id="line-274"> // If filterRowKey returns false and this is a hinting filter, then we must not filter this</span>
+<span class="source-line-no">275</span><span id="line-275"> // rowkey.</span>
+<span class="source-line-no">276</span><span id="line-276"> // Otherwise this sub-filter doesn't get a chance to provide a seek hint, and the scan may</span>
+<span class="source-line-no">277</span><span id="line-277"> // regress into a full scan.</span>
+<span class="source-line-no">278</span><span id="line-278"> anyHintingPassed = true;</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"> return anyRowKeyFiltered && !anyHintingPassed;</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 boolean filterAllRemaining() throws IOException {</span>
+<span class="source-line-no">286</span><span id="line-286"> if (isEmpty()) {</span>
+<span class="source-line-no">287</span><span id="line-287"> return super.filterAllRemaining();</span>
+<span class="source-line-no">288</span><span id="line-288"> }</span>
+<span class="source-line-no">289</span><span id="line-289"> for (int i = 0, n = filters.size(); i < n; i++) {</span>
+<span class="source-line-no">290</span><span id="line-290"> if (filters.get(i).filterAllRemaining()) {</span>
+<span class="source-line-no">291</span><span id="line-291"> return true;</span>
+<span class="source-line-no">292</span><span id="line-292"> }</span>
+<span class="source-line-no">293</span><span id="line-293"> }</span>
+<span class="source-line-no">294</span><span id="line-294"> return false;</span>
+<span class="source-line-no">295</span><span id="line-295"> }</span>
+<span class="source-line-no">296</span><span id="line-296"></span>
+<span class="source-line-no">297</span><span id="line-297"> @Override</span>
+<span class="source-line-no">298</span><span id="line-298"> public boolean filterRow() throws IOException {</span>
+<span class="source-line-no">299</span><span id="line-299"> if (isEmpty()) {</span>
+<span class="source-line-no">300</span><span id="line-300"> return super.filterRow();</span>
+<span class="source-line-no">301</span><span id="line-301"> }</span>
+<span class="source-line-no">302</span><span id="line-302"> for (int i = 0, n = filters.size(); i < n; i++) {</span>
+<span class="source-line-no">303</span><span id="line-303"> Filter filter = filters.get(i);</span>
+<span class="source-line-no">304</span><span id="line-304"> if (filter.filterRow()) {</span>
+<span class="source-line-no">305</span><span id="line-305"> return true;</span>
+<span class="source-line-no">306</span><span id="line-306"> }</span>
+<span class="source-line-no">307</span><span id="line-307"> }</span>
+<span class="source-line-no">308</span><span id="line-308"> return false;</span>
+<span class="source-line-no">309</span><span id="line-309"> }</span>
+<span class="source-line-no">310</span><span id="line-310"></span>
+<span class="source-line-no">311</span><span id="line-311"> @Override</span>
+<span class="source-line-no">312</span><span id="line-312"> public Cell getNextCellHint(Cell currentCell) throws IOException {</span>
+<span class="source-line-no">313</span><span id="line-313"> if (isEmpty()) {</span>
+<span class="source-line-no">314</span><span id="line-314"> return super.getNextCellHint(currentCell);</span>
+<span class="source-line-no">315</span><span id="line-315"> }</span>
+<span class="source-line-no">316</span><span id="line-316"> Cell maxHint = null;</span>
+<span class="source-line-no">317</span><span id="line-317"> for (Filter filter : seekHintFilters) {</span>
+<span class="source-line-no">318</span><span id="line-318"> if (filter.filterAllRemaining()) {</span>
+<span class="source-line-no">319</span><span id="line-319"> continue;</span>
+<span class="source-line-no">320</span><span id="line-320"> }</span>
+<span class="source-line-no">321</span><span id="line-321"> Cell curKeyHint = filter.getNextCellHint(currentCell);</span>
+<span class="source-line-no">322</span><span id="line-322"> if (maxHint == null) {</span>
+<span class="source-line-no">323</span><span id="line-323"> maxHint = curKeyHint;</span>
+<span class="source-line-no">324</span><span id="line-324"> continue;</span>
+<span class="source-line-no">325</span><span id="line-325"> }</span>
+<span class="source-line-no">326</span><span id="line-326"> if (this.compareCell(maxHint, curKeyHint) < 0) {</span>
+<span class="source-line-no">327</span><span id="line-327"> maxHint = curKeyHint;</span>
+<span class="source-line-no">328</span><span id="line-328"> }</span>
+<span class="source-line-no">329</span><span id="line-329"> }</span>
+<span class="source-line-no">330</span><span id="line-330"> return maxHint;</span>
<span class="source-line-no">331</span><span id="line-331"> }</span>
<span class="source-line-no">332</span><span id="line-332"></span>
-<span class="source-line-no">333</span><span id="line-333"> @Override</span>
-<span class="source-line-no">334</span><span id="line-334"> public int hashCode() {</span>
-<span class="source-line-no">335</span><span id="line-335"> return Objects.hash(this.seekHintFilters, this.filters);</span>
-<span class="source-line-no">336</span><span id="line-336"> }</span>
-<span class="source-line-no">337</span><span id="line-337">}</span>
+<span class="source-line-no">333</span><span id="line-333"> /**</span>
+<span class="source-line-no">334</span><span id="line-334"> * Maximal step: return the farthest hint among sub-filters that actually rejected the row. Only</span>
+<span class="source-line-no">335</span><span id="line-335"> * sub-filters whose {@link Filter#filterRowKey(Cell)} returned {@code true} are consulted,</span>
+<span class="source-line-no">336</span><span id="line-336"> * honouring the per-filter contract. Null hints are ignored; if no rejecting sub-filter provides</span>
+<span class="source-line-no">337</span><span id="line-337"> * a hint, return null.</span>
+<span class="source-line-no">338</span><span id="line-338"> */</span>
+<span class="source-line-no">339</span><span id="line-339"> @Override</span>
+<span class="source-line-no">340</span><span id="line-340"> public Cell getHintForRejectedRow(Cell firstRowCell) throws IOException {</span>
+<span class="source-line-no">341</span><span id="line-341"> if (isEmpty()) {</span>
+<span class="source-line-no">342</span><span id="line-342"> return super.getHintForRejectedRow(firstRowCell);</span>
+<span class="source-line-no">343</span><span id="line-343"> }</span>
+<span class="source-line-no">344</span><span id="line-344"> Cell maxHint = null;</span>
+<span class="source-line-no">345</span><span id="line-345"> for (int i = 0, n = filters.size(); i < n; i++) {</span>
+<span class="source-line-no">346</span><span id="line-346"> if (!rejectedByFilterRowKey[i]) {</span>
+<span class="source-line-no">347</span><span id="line-347"> continue;</span>
+<span class="source-line-no">348</span><span id="line-348"> }</span>
+<span class="source-line-no">349</span><span id="line-349"> Filter filter = filters.get(i);</span>
+<span class="source-line-no">350</span><span id="line-350"> if (filter.filterAllRemaining()) {</span>
+<span class="source-line-no">351</span><span id="line-351"> continue;</span>
+<span class="source-line-no">352</span><span id="line-352"> }</span>
+<span class="source-line-no">353</span><span id="line-353"> Cell hint = filter.getHintForRejectedRow(firstRowCell);</span>
+<span class="source-line-no">354</span><span id="line-354"> if (hint == null) {</span>
+<span class="source-line-no">355</span><span id="line-355"> continue;</span>
+<span class="source-line-no">356</span><span id="line-356"> }</span>
+<span class="source-line-no">357</span><span id="line-357"> if (maxHint == null || this.compareCell(maxHint, hint) < 0) {</span>
+<span class="source-line-no">358</span><span id="line-358"> maxHint = hint;</span>
+<span class="source-line-no">359</span><span id="line-359"> }</span>
+<span class="source-line-no">360</span><span id="line-360"> }</span>
+<span class="source-line-no">361</span><span id="line-361"> return maxHint;</span>
+<span class="source-line-no">362</span><span id="line-362"> }</span>
+<span class="source-line-no">363</span><span id="line-363"></span>
+<span class="source-line-no">364</span><span id="line-364"> /** Maximal step: return the farthest skip hint among sub-filters. */</span>
+<span class="source-line-no">365</span><span id="line-365"> @Override</span>
+<span class="source-line-no">366</span><span id="line-366"> public Cell getSkipHint(Cell skippedCell) throws IOException {</span>
+<span class="source-line-no">367</span><span id="line-367"> if (isEmpty()) {</span>
+<span class="source-line-no">368</span><span id="line-368"> return super.getSkipHint(skippedCell);</span>
+<span class="source-line-no">369</span><span id="line-369"> }</span>
+<span class="source-line-no">370</span><span id="line-370"> Cell maxHint = null;</span>
+<span class="source-line-no">371</span><span id="line-371"> for (int i = 0, n = filters.size(); i < n; i++) {</span>
+<span class="source-line-no">372</span><span id="line-372"> Filter filter = filters.get(i);</span>
+<span class="source-line-no">373</span><span id="line-373"> if (filter.filterAllRemaining()) {</span>
+<span class="source-line-no">374</span><span id="line-374"> continue;</span>
+<span class="source-line-no">375</span><span id="line-375"> }</span>
+<span class="source-line-no">376</span><span id="line-376"> Cell hint = filter.getSkipHint(skippedCell);</span>
+<span class="source-line-no">377</span><span id="line-377"> if (hint == null) {</span>
+<span class="source-line-no">378</span><span id="line-378"> continue;</span>
+<span class="source-line-no">379</span><span id="line-379"> }</span>
+<span class="source-line-no">380</span><span id="line-380"> if (maxHint == null || this.compareCell(maxHint, hint) < 0) {</span>
+<span class="source-line-no">381</span><span id="line-381"> maxHint = hint;</span>
+<span class="source-line-no">382</span><span id="line-382"> }</span>
+<span class="source-line-no">383</span><span id="line-383"> }</span>
+<span class="source-line-no">384</span><span id="line-384"> return maxHint;</span>
+<span class="source-line-no">385</span><span id="line-385"> }</span>
+<span class="source-line-no">386</span><span id="line-386"></span>
+<span class="source-line-no">387</span><span id="line-387"> @Override</span>
+<span class="source-line-no">388</span><span id="line-388"> public boolean equals(Object obj) {</span>
+<span class="source-line-no">389</span><span id="line-389"> if (this == obj) {</span>
+<span class="source-line-no">390</span><span id="line-390"> return true;</span>
+<span class="source-line-no">391</span><span id="line-391"> }</span>
+<span class="source-line-no">392</span><span id="line-392"> if (!(obj instanceof FilterListWithAND)) {</span>
+<span class="source-line-no">393</span><span id="line-393"> return false;</span>
+<span class="source-line-no">394</span><span id="line-394"> }</span>
+<span class="source-line-no">395</span><span id="line-395"> FilterListWithAND f = (FilterListWithAND) obj;</span>
+<span class="source-line-no">396</span><span id="line-396"> return this.filters.equals(f.getFilters()) && this.seekHintFilters.equals(f.seekHintFilters);</span>
+<span class="source-line-no">397</span><span id="line-397"> }</span>
+<span class="source-line-no">398</span><span id="line-398"></span>
+<span class="source-line-no">399</span><span id="line-399"> @Override</span>
+<span class="source-line-no">400</span><span id="line-400"> public int hashCode() {</span>
+<span class="source-line-no">401</span><span id="line-401"> return Objects.hash(this.seekHintFilters, this.filters);</span>
+<span class="source-line-no">402</span><span id="line-402"> }</span>
+<span class="source-line-no">403</span><span id="line-403">}</span>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/filter/FilterListWithOR.html b/devapidocs/src-html/org/apache/hadoop/hbase/filter/FilterListWithOR.html
index 7d8c580361d..c6e354efaa7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/filter/FilterListWithOR.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/filter/FilterListWithOR.html
@@ -405,24 +405,76 @@
<span class="source-line-no">392</span><span id="line-392"> return minKeyHint;</span>
<span class="source-line-no">393</span><span id="line-393"> }</span>
<span class="source-line-no">394</span><span id="line-394"></span>
-<span class="source-line-no">395</span><span id="line-395"> @Override</span>
-<span class="source-line-no">396</span><span id="line-396"> public boolean equals(Object obj) {</span>
-<span class="source-line-no">397</span><span id="line-397"> if (this == obj) {</span>
-<span class="source-line-no">398</span><span id="line-398"> return true;</span>
-<span class="source-line-no">399</span><span id="line-399"> }</span>
-<span class="source-line-no">400</span><span id="line-400"> if (!(obj instanceof FilterListWithOR)) {</span>
-<span class="source-line-no">401</span><span id="line-401"> return false;</span>
-<span class="source-line-no">402</span><span id="line-402"> }</span>
-<span class="source-line-no">403</span><span id="line-403"> FilterListWithOR f = (FilterListWithOR) obj;</span>
-<span class="source-line-no">404</span><span id="line-404"> return this.filters.equals(f.getFilters()) && this.prevFilterRCList.equals(f.prevFilterRCList)</span>
-<span class="source-line-no">405</span><span id="line-405"> && this.prevCellList.equals(f.prevCellList);</span>
-<span class="source-line-no">406</span><span id="line-406"> }</span>
-<span class="source-line-no">407</span><span id="line-407"></span>
-<span class="source-line-no">408</span><span id="line-408"> @Override</span>
-<span class="source-line-no">409</span><span id="line-409"> public int hashCode() {</span>
-<span class="source-line-no">410</span><span id="line-410"> return Objects.hash(this.prevFilterRCList, this.prevCellList, this.filters);</span>
-<span class="source-line-no">411</span><span id="line-411"> }</span>
-<span class="source-line-no">412</span><span id="line-412">}</span>
+<span class="source-line-no">395</span><span id="line-395"> /**</span>
+<span class="source-line-no">396</span><span id="line-396"> * Minimal step: return the nearest hint. If any non-terminated sub-filter returns null, the</span>
+<span class="source-line-no">397</span><span id="line-397"> * composite cannot safely skip, so return null.</span>
+<span class="source-line-no">398</span><span id="line-398"> */</span>
+<span class="source-line-no">399</span><span id="line-399"> @Override</span>
+<span class="source-line-no">400</span><span id="line-400"> public Cell getHintForRejectedRow(Cell firstRowCell) throws IOException {</span>
+<span class="source-line-no">401</span><span id="line-401"> if (isEmpty()) {</span>
+<span class="source-line-no">402</span><span id="line-402"> return super.getHintForRejectedRow(firstRowCell);</span>
+<span class="source-line-no">403</span><span id="line-403"> }</span>
+<span class="source-line-no">404</span><span id="line-404"> Cell minHint = null;</span>
+<span class="source-line-no">405</span><span id="line-405"> for (int i = 0, n = filters.size(); i < n; i++) {</span>
+<span class="source-line-no">406</span><span id="line-406"> Filter filter = filters.get(i);</span>
+<span class="source-line-no">407</span><span id="line-407"> if (filter.filterAllRemaining()) {</span>
+<span class="source-line-no">408</span><span id="line-408"> continue;</span>
+<span class="source-line-no">409</span><span id="line-409"> }</span>
+<span class="source-line-no">410</span><span id="line-410"> Cell hint = filter.getHintForRejectedRow(firstRowCell);</span>
+<span class="source-line-no">411</span><span id="line-411"> if (hint == null) {</span>
+<span class="source-line-no">412</span><span id="line-412"> return null;</span>
+<span class="source-line-no">413</span><span id="line-413"> }</span>
+<span class="source-line-no">414</span><span id="line-414"> if (minHint == null || this.compareCell(minHint, hint) > 0) {</span>
+<span class="source-line-no">415</span><span id="line-415"> minHint = hint;</span>
+<span class="source-line-no">416</span><span id="line-416"> }</span>
+<span class="source-line-no">417</span><span id="line-417"> }</span>
+<span class="source-line-no">418</span><span id="line-418"> return minHint;</span>
+<span class="source-line-no">419</span><span id="line-419"> }</span>
+<span class="source-line-no">420</span><span id="line-420"></span>
+<span class="source-line-no">421</span><span id="line-421"> /**</span>
+<span class="source-line-no">422</span><span id="line-422"> * Minimal step: return the nearest skip hint. Null from any sub-filter collapses the entire</span>
+<span class="source-line-no">423</span><span id="line-423"> * result to null.</span>
+<span class="source-line-no">424</span><span id="line-424"> */</span>
+<span class="source-line-no">425</span><span id="line-425"> @Override</span>
+<span class="source-line-no">426</span><span id="line-426"> public Cell getSkipHint(Cell skippedCell) throws IOException {</span>
+<span class="source-line-no">427</span><span id="line-427"> if (isEmpty()) {</span>
+<span class="source-line-no">428</span><span id="line-428"> return super.getSkipHint(skippedCell);</span>
+<span class="source-line-no">429</span><span id="line-429"> }</span>
+<span class="source-line-no">430</span><span id="line-430"> Cell minHint = null;</span>
+<span class="source-line-no">431</span><span id="line-431"> for (int i = 0, n = filters.size(); i < n; i++) {</span>
+<span class="source-line-no">432</span><span id="line-432"> Filter filter = filters.get(i);</span>
+<span class="source-line-no">433</span><span id="line-433"> if (filter.filterAllRemaining()) {</span>
+<span class="source-line-no">434</span><span id="line-434"> continue;</span>
+<span class="source-line-no">435</span><span id="line-435"> }</span>
+<span class="source-line-no">436</span><span id="line-436"> Cell hint = filter.getSkipHint(skippedCell);</span>
+<span class="source-line-no">437</span><span id="line-437"> if (hint == null) {</span>
+<span class="source-line-no">438</span><span id="line-438"> return null;</span>
+<span class="source-line-no">439</span><span id="line-439"> }</span>
+<span class="source-line-no">440</span><span id="line-440"> if (minHint == null || this.compareCell(minHint, hint) > 0) {</span>
+<span class="source-line-no">441</span><span id="line-441"> minHint = hint;</span>
+<span class="source-line-no">442</span><span id="line-442"> }</span>
+<span class="source-line-no">443</span><span id="line-443"> }</span>
+<span class="source-line-no">444</span><span id="line-444"> return minHint;</span>
+<span class="source-line-no">445</span><span id="line-445"> }</span>
+<span class="source-line-no">446</span><span id="line-446"></span>
+<span class="source-line-no">447</span><span id="line-447"> @Override</span>
+<span class="source-line-no">448</span><span id="line-448"> public boolean equals(Object obj) {</span>
+<span class="source-line-no">449</span><span id="line-449"> if (this == obj) {</span>
+<span class="source-line-no">450</span><span id="line-450"> return true;</span>
+<span class="source-line-no">451</span><span id="line-451"> }</span>
+<span class="source-line-no">452</span><span id="line-452"> if (!(obj instanceof FilterListWithOR)) {</span>
+<span class="source-line-no">453</span><span id="line-453"> return false;</span>
+<span class="source-line-no">454</span><span id="line-454"> }</span>
+<span class="source-line-no">455</span><span id="line-455"> FilterListWithOR f = (FilterListWithOR) obj;</span>
+<span class="source-line-no">456</span><span id="line-456"> return this.filters.equals(f.getFilters()) && this.prevFilterRCList.equals(f.prevFilterRCList)</span>
+<span class="source-line-no">457</span><span id="line-457"> && this.prevCellList.equals(f.prevCellList);</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"> @Override</span>
+<span class="source-line-no">461</span><span id="line-461"> public int hashCode() {</span>
+<span class="source-line-no">462</span><span id="line-462"> return Objects.hash(this.prevFilterRCList, this.prevCellList, this.filters);</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>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.html b/devapidocs/src-html/org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.html
index 70dae8a95af..1d8106064c4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/filter/MultipleColumnPrefixFilter.html
@@ -186,53 +186,76 @@
<span class="source-line-no">173</span><span id="line-173"> return PrivateCellUtil.createFirstOnRowCol(cell, hint, 0, hint.length);</span>
<span class="source-line-no">174</span><span id="line-174"> }</span>
<span class="source-line-no">175</span><span id="line-175"></span>
-<span class="source-line-no">176</span><span id="line-176"> public TreeSet<byte[]> createTreeSet() {</span>
-<span class="source-line-no">177</span><span id="line-177"> return new TreeSet<>(new Comparator<Object>() {</span>
-<span class="source-line-no">178</span><span id="line-178"> @Override</span>
-<span class="source-line-no">179</span><span id="line-179"> public int compare(Object o1, Object o2) {</span>
-<span class="source-line-no">180</span><span id="line-180"> if (o1 == null || o2 == null) throw new IllegalArgumentException("prefixes can't be null");</span>
-<span class="source-line-no">181</span><span id="line-181"></span>
-<span class="source-line-no">182</span><span id="line-182"> byte[] b1 = (byte[]) o1;</span>
-<span class="source-line-no">183</span><span id="line-183"> byte[] b2 = (byte[]) o2;</span>
-<span class="source-line-no">184</span><span id="line-184"> return Bytes.compareTo(b1, 0, b1.length, b2, 0, b2.length);</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"> }</span>
-<span class="source-line-no">188</span><span id="line-188"></span>
-<span class="source-line-no">189</span><span id="line-189"> @Override</span>
-<span class="source-line-no">190</span><span id="line-190"> public String toString() {</span>
-<span class="source-line-no">191</span><span id="line-191"> return toString(MAX_LOG_PREFIXES);</span>
-<span class="source-line-no">192</span><span id="line-192"> }</span>
-<span class="source-line-no">193</span><span id="line-193"></span>
-<span class="source-line-no">194</span><span id="line-194"> protected String toString(int maxPrefixes) {</span>
-<span class="source-line-no">195</span><span id="line-195"> StringBuilder prefixes = new StringBuilder();</span>
-<span class="source-line-no">196</span><span id="line-196"></span>
-<span class="source-line-no">197</span><span id="line-197"> int count = 0;</span>
-<span class="source-line-no">198</span><span id="line-198"> for (byte[] ba : this.sortedPrefixes) {</span>
-<span class="source-line-no">199</span><span id="line-199"> if (count >= maxPrefixes) {</span>
-<span class="source-line-no">200</span><span id="line-200"> break;</span>
-<span class="source-line-no">201</span><span id="line-201"> }</span>
-<span class="source-line-no">202</span><span id="line-202"> ++count;</span>
-<span class="source-line-no">203</span><span id="line-203"> prefixes.append(Bytes.toStringBinary(ba));</span>
-<span class="source-line-no">204</span><span id="line-204"> if (count < this.sortedPrefixes.size() && count < maxPrefixes) {</span>
-<span class="source-line-no">205</span><span id="line-205"> prefixes.append(", ");</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">209</span><span id="line-209"> return String.format("%s (%d/%d): [%s]", this.getClass().getSimpleName(), count,</span>
-<span class="source-line-no">210</span><span id="line-210"> this.sortedPrefixes.size(), prefixes.toString());</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 boolean equals(Object obj) {</span>
-<span class="source-line-no">215</span><span id="line-215"> return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);</span>
-<span class="source-line-no">216</span><span id="line-216"> }</span>
-<span class="source-line-no">217</span><span id="line-217"></span>
-<span class="source-line-no">218</span><span id="line-218"> @Override</span>
-<span class="source-line-no">219</span><span id="line-219"> public int hashCode() {</span>
-<span class="source-line-no">220</span><span id="line-220"> return Objects.hash(this.sortedPrefixes);</span>
-<span class="source-line-no">221</span><span id="line-221"> }</span>
-<span class="source-line-no">222</span><span id="line-222">}</span>
+<span class="source-line-no">176</span><span id="line-176"> @Override</span>
+<span class="source-line-no">177</span><span id="line-177"> public Cell getSkipHint(Cell skippedCell) throws IOException {</span>
+<span class="source-line-no">178</span><span id="line-178"> if (sortedPrefixes.isEmpty()) {</span>
+<span class="source-line-no">179</span><span id="line-179"> return null;</span>
+<span class="source-line-no">180</span><span id="line-180"> }</span>
+<span class="source-line-no">181</span><span id="line-181"> byte[] qualifier = CellUtil.cloneQualifier(skippedCell);</span>
+<span class="source-line-no">182</span><span id="line-182"> TreeSet<byte[]> lesserOrEqual = (TreeSet<byte[]>) sortedPrefixes.headSet(qualifier, true);</span>
+<span class="source-line-no">183</span><span id="line-183"> byte[] target;</span>
+<span class="source-line-no">184</span><span id="line-184"> if (lesserOrEqual.isEmpty()) {</span>
+<span class="source-line-no">185</span><span id="line-185"> target = sortedPrefixes.first();</span>
+<span class="source-line-no">186</span><span id="line-186"> } else {</span>
+<span class="source-line-no">187</span><span id="line-187"> byte[] largest = lesserOrEqual.last();</span>
+<span class="source-line-no">188</span><span id="line-188"> if (Bytes.startsWith(qualifier, largest)) {</span>
+<span class="source-line-no">189</span><span id="line-189"> return null;</span>
+<span class="source-line-no">190</span><span id="line-190"> }</span>
+<span class="source-line-no">191</span><span id="line-191"> target = sortedPrefixes.higher(largest);</span>
+<span class="source-line-no">192</span><span id="line-192"> if (target == null) {</span>
+<span class="source-line-no">193</span><span id="line-193"> return null;</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"> return PrivateCellUtil.createFirstOnRowCol(skippedCell, target, 0, target.length);</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>
+<span class="source-line-no">199</span><span id="line-199"> public TreeSet<byte[]> createTreeSet() {</span>
+<span class="source-line-no">200</span><span id="line-200"> return new TreeSet<>(new Comparator<Object>() {</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 int compare(Object o1, Object o2) {</span>
+<span class="source-line-no">203</span><span id="line-203"> if (o1 == null || o2 == null) throw new IllegalArgumentException("prefixes can't be null");</span>
+<span class="source-line-no">204</span><span id="line-204"></span>
+<span class="source-line-no">205</span><span id="line-205"> byte[] b1 = (byte[]) o1;</span>
+<span class="source-line-no">206</span><span id="line-206"> byte[] b2 = (byte[]) o2;</span>
+<span class="source-line-no">207</span><span id="line-207"> return Bytes.compareTo(b1, 0, b1.length, b2, 0, b2.length);</span>
+<span class="source-line-no">208</span><span id="line-208"> }</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"> @Override</span>
+<span class="source-line-no">213</span><span id="line-213"> public String toString() {</span>
+<span class="source-line-no">214</span><span id="line-214"> return toString(MAX_LOG_PREFIXES);</span>
+<span class="source-line-no">215</span><span id="line-215"> }</span>
+<span class="source-line-no">216</span><span id="line-216"></span>
+<span class="source-line-no">217</span><span id="line-217"> protected String toString(int maxPrefixes) {</span>
+<span class="source-line-no">218</span><span id="line-218"> StringBuilder prefixes = new StringBuilder();</span>
+<span class="source-line-no">219</span><span id="line-219"></span>
+<span class="source-line-no">220</span><span id="line-220"> int count = 0;</span>
+<span class="source-line-no">221</span><span id="line-221"> for (byte[] ba : this.sortedPrefixes) {</span>
+<span class="source-line-no">222</span><span id="line-222"> if (count >= maxPrefixes) {</span>
+<span class="source-line-no">223</span><span id="line-223"> break;</span>
+<span class="source-line-no">224</span><span id="line-224"> }</span>
+<span class="source-line-no">225</span><span id="line-225"> ++count;</span>
+<span class="source-line-no">226</span><span id="line-226"> prefixes.append(Bytes.toStringBinary(ba));</span>
+<span class="source-line-no">227</span><span id="line-227"> if (count < this.sortedPrefixes.size() && count < maxPrefixes) {</span>
+<span class="source-line-no">228</span><span id="line-228"> prefixes.append(", ");</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"></span>
+<span class="source-line-no">232</span><span id="line-232"> return String.format("%s (%d/%d): [%s]", this.getClass().getSimpleName(), count,</span>
+<span class="source-line-no">233</span><span id="line-233"> this.sortedPrefixes.size(), prefixes.toString());</span>
+<span class="source-line-no">234</span><span id="line-234"> }</span>
+<span class="source-line-no">235</span><span id="line-235"></span>
+<span class="source-line-no">236</span><span id="line-236"> @Override</span>
+<span class="source-line-no">237</span><span id="line-237"> public boolean equals(Object obj) {</span>
+<span class="source-line-no">238</span><span id="line-238"> return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);</span>
+<span class="source-line-no">239</span><span id="line-239"> }</span>
+<span class="source-line-no">240</span><span id="line-240"></span>
+<span class="source-line-no">241</span><span id="line-241"> @Override</span>
+<span class="source-line-no">242</span><span id="line-242"> public int hashCode() {</span>
+<span class="source-line-no">243</span><span id="line-243"> return Objects.hash(this.sortedPrefixes);</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>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/filter/SkipFilter.html b/devapidocs/src-html/org/apache/hadoop/hbase/filter/SkipFilter.html
index c31191a7d0a..31a0f1e52fc 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/filter/SkipFilter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/filter/SkipFilter.html
@@ -155,25 +155,35 @@
<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"> @Override</span>
-<span class="source-line-no">145</span><span id="line-145"> public boolean isFamilyEssential(byte[] name) throws IOException {</span>
-<span class="source-line-no">146</span><span id="line-146"> return filter.isFamilyEssential(name);</span>
+<span class="source-line-no">145</span><span id="line-145"> public Cell getHintForRejectedRow(Cell firstRowCell) throws IOException {</span>
+<span class="source-line-no">146</span><span id="line-146"> return filter.getHintForRejectedRow(firstRowCell);</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"> @Override</span>
-<span class="source-line-no">150</span><span id="line-150"> public String toString() {</span>
-<span class="source-line-no">151</span><span id="line-151"> return this.getClass().getSimpleName() + " " + this.filter.toString();</span>
+<span class="source-line-no">150</span><span id="line-150"> public Cell getSkipHint(Cell skippedCell) throws IOException {</span>
+<span class="source-line-no">151</span><span id="line-151"> return filter.getSkipHint(skippedCell);</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"> @Override</span>
-<span class="source-line-no">155</span><span id="line-155"> public boolean equals(Object obj) {</span>
-<span class="source-line-no">156</span><span id="line-156"> return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);</span>
+<span class="source-line-no">155</span><span id="line-155"> public boolean isFamilyEssential(byte[] name) throws IOException {</span>
+<span class="source-line-no">156</span><span id="line-156"> return filter.isFamilyEssential(name);</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"> @Override</span>
-<span class="source-line-no">160</span><span id="line-160"> public int hashCode() {</span>
-<span class="source-line-no">161</span><span id="line-161"> return Objects.hash(this.filter);</span>
+<span class="source-line-no">160</span><span id="line-160"> public String toString() {</span>
+<span class="source-line-no">161</span><span id="line-161"> return this.getClass().getSimpleName() + " " + this.filter.toString();</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">163</span><span id="line-163"></span>
+<span class="source-line-no">164</span><span id="line-164"> @Override</span>
+<span class="source-line-no">165</span><span id="line-165"> public boolean equals(Object obj) {</span>
+<span class="source-line-no">166</span><span id="line-166"> return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);</span>
+<span class="source-line-no">167</span><span id="line-167"> }</span>
+<span class="source-line-no">168</span><span id="line-168"></span>
+<span class="source-line-no">169</span><span id="line-169"> @Override</span>
+<span class="source-line-no">170</span><span id="line-170"> public int hashCode() {</span>
+<span class="source-line-no">171</span><span id="line-171"> return Objects.hash(this.filter);</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>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/filter/WhileMatchFilter.html b/devapidocs/src-html/org/apache/hadoop/hbase/filter/WhileMatchFilter.html
index 27cdc423769..fb13514183d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/filter/WhileMatchFilter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/filter/WhileMatchFilter.html
@@ -153,25 +153,35 @@
<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 boolean isFamilyEssential(byte[] name) throws IOException {</span>
-<span class="source-line-no">144</span><span id="line-144"> return filter.isFamilyEssential(name);</span>
+<span class="source-line-no">143</span><span id="line-143"> public Cell getHintForRejectedRow(Cell firstRowCell) throws IOException {</span>
+<span class="source-line-no">144</span><span id="line-144"> return filter.getHintForRejectedRow(firstRowCell);</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 String toString() {</span>
-<span class="source-line-no">149</span><span id="line-149"> return this.getClass().getSimpleName() + " " + this.filter.toString();</span>
+<span class="source-line-no">148</span><span id="line-148"> public Cell getSkipHint(Cell skippedCell) throws IOException {</span>
+<span class="source-line-no">149</span><span id="line-149"> return filter.getSkipHint(skippedCell);</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 boolean equals(Object obj) {</span>
-<span class="source-line-no">154</span><span id="line-154"> return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);</span>
+<span class="source-line-no">153</span><span id="line-153"> public boolean isFamilyEssential(byte[] name) throws IOException {</span>
+<span class="source-line-no">154</span><span id="line-154"> return filter.isFamilyEssential(name);</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"> @Override</span>
-<span class="source-line-no">158</span><span id="line-158"> public int hashCode() {</span>
-<span class="source-line-no">159</span><span id="line-159"> return Objects.hash(this.filter);</span>
+<span class="source-line-no">158</span><span id="line-158"> public String toString() {</span>
+<span class="source-line-no">159</span><span id="line-159"> return this.getClass().getSimpleName() + " " + this.filter.toString();</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">161</span><span id="line-161"></span>
+<span class="source-line-no">162</span><span id="line-162"> @Override</span>
+<span class="source-line-no">163</span><span id="line-163"> public boolean equals(Object obj) {</span>
+<span class="source-line-no">164</span><span id="line-164"> return obj instanceof Filter && areSerializedFieldsEqual((Filter) obj);</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"> @Override</span>
+<span class="source-line-no">168</span><span id="line-168"> public int hashCode() {</span>
+<span class="source-line-no">169</span><span id="line-169"> return Objects.hash(this.filter);</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>
diff --git a/docs/acl-matrix/index.html b/docs/acl-matrix/index.html
index d653ea7c195..be49d7086f1 100644
--- a/docs/acl-matrix/index.html
+++ b/docs/acl-matrix/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -67,10 +67,10 @@ In case the table goes out of date, the unit tests which check for accuracy of p
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/amv2/index.html b/docs/amv2/index.html
index 574b11b6902..e8012cb0c2a 100644
--- a/docs/amv2/index.html
+++ b/docs/amv2/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -104,10 +104,10 @@
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/architecture/bulk-loading/index.html b/docs/architecture/bulk-loading/index.html
index 2b3fddf0502..2cf66e71f1d 100644
--- a/docs/architecture/bulk-loading/index.html
+++ b/docs/architecture/bulk-loading/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -70,10 +70,10 @@ every peer(s) cluster RS must be restarted to reload the configuration.</p></div
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/architecture/catalog-tables/index.html b/docs/architecture/catalog-tables/index.html
index 6b9189f95a6..977f0b7ada5 100644
--- a/docs/architecture/catalog-tables/index.html
+++ b/docs/architecture/catalog-tables/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -50,10 +50,10 @@ region in the table</p></div></div></div>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/architecture/client-request-filters/index.html b/docs/architecture/client-request-filters/index.html
index 90c9f0668d7..12ba93a50bc 100644
--- a/docs/architecture/client-request-filters/index.html
+++ b/docs/architecture/client-request-filters/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -189,10 +189,10 @@
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/architecture/client/index.html b/docs/architecture/client/index.html
index 87b570439b9..81318f98102 100644
--- a/docs/architecture/client/index.html
+++ b/docs/architecture/client/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -191,10 +191,10 @@ configuration to fallback to the ZooKeeper based connection registry implementat
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/architecture/hbase-mob/index.html b/docs/architecture/hbase-mob/index.html
index 54eedfd26ec..e7639dd4ce1 100644
--- a/docs/architecture/hbase-mob/index.html
+++ b/docs/architecture/hbase-mob/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -481,10 +481,10 @@ the MOB stored values for that table or region respectively.</li>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/architecture/hdfs/index.html b/docs/architecture/hdfs/index.html
index 6be4f36ff04..6f11aa6abfb 100644
--- a/docs/architecture/hdfs/index.html
+++ b/docs/architecture/hdfs/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -34,10 +34,10 @@
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/architecture/index.html b/docs/architecture/index.html
index df26a5b731d..90cd637626c 100644
--- a/docs/architecture/index.html
+++ b/docs/architecture/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -37,10 +37,10 @@
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/architecture/master/index.html b/docs/architecture/master/index.html
index fa93d495157..7c21147482d 100644
--- a/docs/architecture/master/index.html
+++ b/docs/architecture/master/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -93,10 +93,10 @@
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/architecture/overview/index.html b/docs/architecture/overview/index.html
index a4967c0dcfc..4dbb28e7961 100644
--- a/docs/architecture/overview/index.html
+++ b/docs/architecture/overview/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -50,10 +50,10 @@
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/architecture/regions/index.html b/docs/architecture/regions/index.html
index 4ecdfe4ae8e..e54cefadf3d 100644
--- a/docs/architecture/regions/index.html
+++ b/docs/architecture/regions/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="image" href="/assets/region_states-D4hoWYLI.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPriority="auto"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="fon [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="image" href="/assets/region_states-D4hoWYLI.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPriority="auto"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="fon [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -606,10 +606,10 @@ Compaction Algorithm</a>.</p></div></div></div>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/architecture/regionserver/index.html b/docs/architecture/regionserver/index.html
index 89f86e8843c..7386ad56350 100644
--- a/docs/architecture/regionserver/index.html
+++ b/docs/architecture/regionserver/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="image" href="/assets/region_split_process-DrwL5IoS.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPriority="auto"/><link rel="preload" as="image" href="/assets/WAL_splitting-DCT3Hgkm.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 9 [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="image" href="/assets/region_split_process-DrwL5IoS.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPriority="auto"/><link rel="preload" as="image" href="/assets/WAL_splitting-DCT3Hgkm.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 9 [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -431,10 +431,10 @@ loss/inconsistency as HMaster has no information about previous WAL directory.</
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/architecture/snapshot-scanner/index.html b/docs/architecture/snapshot-scanner/index.html
index 43da131c4cb..79c37a51c01 100644
--- a/docs/architecture/snapshot-scanner/index.html
+++ b/docs/architecture/snapshot-scanner/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -104,10 +104,10 @@ false by default for every table, this means the HBase granted ACLs will not be
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/architecture/timeline-consistent-reads/index.html b/docs/architecture/timeline-consistent-reads/index.html
index fbf7007e34f..9036b456a09 100644
--- a/docs/architecture/timeline-consistent-reads/index.html
+++ b/docs/architecture/timeline-consistent-reads/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="image" href="/assets/timeline_consistency-WFOSacSg.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPriority="auto"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="image" href="/assets/timeline_consistency-WFOSacSg.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPriority="auto"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -244,10 +244,10 @@
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/asf/index.html b/docs/asf/index.html
index 7f5e4f4f282..e6ea716b4dc 100644
--- a/docs/asf/index.html
+++ b/docs/asf/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -32,10 +32,10 @@
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/backup-restore/additional-topics/index.html b/docs/backup-restore/additional-topics/index.html
index da001d959a9..afdd877fba9 100644
--- a/docs/backup-restore/additional-topics/index.html
+++ b/docs/backup-restore/additional-topics/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="image" href="/assets/backup-app-components-ZN_OfKpI.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPriority="auto"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="image" href="/assets/backup-app-components-ZN_OfKpI.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPriority="auto"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -249,10 +249,10 @@ which present information for consumption (<a href="https://issues.apache.org/ji
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/backup-restore/administration/index.html b/docs/backup-restore/administration/index.html
index a5cf5ba88a3..4de67472c4a 100644
--- a/docs/backup-restore/administration/index.html
+++ b/docs/backup-restore/administration/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -118,10 +118,10 @@ automatically recover on its own.</p>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/backup-restore/commands/index.html b/docs/backup-restore/commands/index.html
index ff231e139b8..b8b4ca56955 100644
--- a/docs/backup-restore/commands/index.html
+++ b/docs/backup-restore/commands/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -177,10 +177,10 @@ case of failure on the primary cluster.</p></div></div></div>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/backup-restore/index.html b/docs/backup-restore/index.html
index aba549d3c5b..6a7f6280564 100644
--- a/docs/backup-restore/index.html
+++ b/docs/backup-restore/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -29,10 +29,10 @@
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/backup-restore/overview/index.html b/docs/backup-restore/overview/index.html
index b554a4395d9..06aed61d85c 100644
--- a/docs/backup-restore/overview/index.html
+++ b/docs/backup-restore/overview/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="image" href="/assets/backup-intra-cluster-VtQszuA-.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPriority="auto"/><link rel="preload" as="image" href="/assets/backup-dedicated-cluster-BDX3WGln.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200 [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="image" href="/assets/backup-intra-cluster-VtQszuA-.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPriority="auto"/><link rel="preload" as="image" href="/assets/backup-dedicated-cluster-BDX3WGln.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200 [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -140,10 +140,10 @@ literal text which should be added to hbase-site.xml.</p></div></div></div>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/building-and-developing/announcing/index.html b/docs/building-and-developing/announcing/index.html
index 6bfa3858aec..d65fc21eead 100644
--- a/docs/building-and-developing/announcing/index.html
+++ b/docs/building-and-developing/announcing/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -63,10 +63,10 @@
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/building-and-developing/building/index.html b/docs/building-and-developing/building/index.html
index 06b060c81e9..cf8cd1031e8 100644
--- a/docs/building-and-developing/building/index.html
+++ b/docs/building-and-developing/building/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -180,10 +180,10 @@ protobuf later, then we don't have to add the profile '-Paarch64'
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/building-and-developing/developer-guidelines/index.html b/docs/building-and-developing/developer-guidelines/index.html
index 9e8ee00d8a9..bc127fff72d 100644
--- a/docs/building-and-developing/developer-guidelines/index.html
+++ b/docs/building-and-developing/developer-guidelines/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -583,10 +583,10 @@ for developing new HBase-related Maven archetypes, please see
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/building-and-developing/generating-documentation/index.html b/docs/building-and-developing/generating-documentation/index.html
index 8d6483795e6..ab8b0d2dabe 100644
--- a/docs/building-and-developing/generating-documentation/index.html
+++ b/docs/building-and-developing/generating-documentation/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -32,10 +32,10 @@ See <a href="/docs/contributing-to-documentation" data-discover="true">appendix
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/building-and-developing/getting-involved/index.html b/docs/building-and-developing/getting-involved/index.html
index 995b70b0517..965b250a553 100644
--- a/docs/building-and-developing/getting-involved/index.html
+++ b/docs/building-and-developing/getting-involved/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -137,10 +137,10 @@ a similar issue in the future.</li>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/building-and-developing/ides/index.html b/docs/building-and-developing/ides/index.html
index 51f853e236e..17cdad56e81 100644
--- a/docs/building-and-developing/ides/index.html
+++ b/docs/building-and-developing/ides/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -119,10 +119,10 @@ documenting your setup process here.</p></div><a href="https://github.com/apache
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/building-and-developing/index.html b/docs/building-and-developing/index.html
index 284f67faccf..3fde27befa7 100644
--- a/docs/building-and-developing/index.html
+++ b/docs/building-and-developing/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -30,10 +30,10 @@ Being familiar with these guidelines will help the HBase committers to use your
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/building-and-developing/releasing/index.html b/docs/building-and-developing/releasing/index.html
index b63214c374d..5cbd3f922c6 100644
--- a/docs/building-and-developing/releasing/index.html
+++ b/docs/building-and-developing/releasing/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -219,10 +219,10 @@ It will put a snapshot up into the apache snapshot repository for you.</p></div>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/building-and-developing/repositories/index.html b/docs/building-and-developing/repositories/index.html
index 5598566a8ef..51cd709e078 100644
--- a/docs/building-and-developing/repositories/index.html
+++ b/docs/building-and-developing/repositories/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -37,10 +37,10 @@ These are the following:</p>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/building-and-developing/tests/index.html b/docs/building-and-developing/tests/index.html
index 74b2da57530..c8a361c1101 100644
--- a/docs/building-and-developing/tests/index.html
+++ b/docs/building-and-developing/tests/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -577,10 +577,10 @@ just run as the <em>slowDeterministic</em> policy
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/building-and-developing/updating-landing/index.html b/docs/building-and-developing/updating-landing/index.html
index b93f51c196b..6a0d9339df8 100644
--- a/docs/building-and-developing/updating-landing/index.html
+++ b/docs/building-and-developing/updating-landing/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -32,10 +32,10 @@
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/building-and-developing/voting/index.html b/docs/building-and-developing/voting/index.html
index ad7ca8b6ea1..75af8a9c986 100644
--- a/docs/building-and-developing/voting/index.html
+++ b/docs/building-and-developing/voting/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -97,10 +97,10 @@ for how we arrived at this process.</p>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/bulk-data-generator-tool/index.html b/docs/bulk-data-generator-tool/index.html
index 0068b0c02d9..a1b6f8c266f 100644
--- a/docs/bulk-data-generator-tool/index.html
+++ b/docs/bulk-data-generator-tool/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -70,10 +70,10 @@ TOOL_EVENT_ID suffix and other columns of the row are populated with random data
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/case-studies/index.html b/docs/case-studies/index.html
index 1749f486ed0..7f0dd194899 100644
--- a/docs/case-studies/index.html
+++ b/docs/case-studies/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -124,10 +124,10 @@ Although this research is on an older version of the codebase, this writeup is s
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/community/index.html b/docs/community/index.html
index 7be045998bb..e1a7395c3f2 100644
--- a/docs/community/index.html
+++ b/docs/community/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -53,10 +53,10 @@
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/compression/index.html b/docs/compression/index.html
index 16aa4788906..db23956083a 100644
--- a/docs/compression/index.html
+++ b/docs/compression/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="image" href="/assets/data_block_no_encoding-BRNLFT3D.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPriority="auto"/><link rel="preload" as="image" href="/assets/data_block_prefix_encoding-DX9fSxyO.png" imageSizes="(max-width: 768px) 100vw, (max-width: [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="image" href="/assets/data_block_no_encoding-BRNLFT3D.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPriority="auto"/><link rel="preload" as="image" href="/assets/data_block_prefix_encoding-DX9fSxyO.png" imageSizes="(max-width: 768px) 100vw, (max-width: [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -408,10 +408,10 @@ Following is an example using HBase Shell:</p>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/configuration/basic-prerequisites/index.html b/docs/configuration/basic-prerequisites/index.html
index 6371003ebcc..217186440f1 100644
--- a/docs/configuration/basic-prerequisites/index.html
+++ b/docs/configuration/basic-prerequisites/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -132,10 +132,10 @@ HBase appears hung.</p></div></div></div>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/configuration/confirm/index.html b/docs/configuration/confirm/index.html
index 980d6440673..0888f8a4b61 100644
--- a/docs/configuration/confirm/index.html
+++ b/docs/configuration/confirm/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -40,10 +40,10 @@
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/configuration/default/index.html b/docs/configuration/default/index.html
index 71ca006de21..472ddf6167d 100644
--- a/docs/configuration/default/index.html
+++ b/docs/configuration/default/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -806,10 +806,10 @@
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/configuration/dynamic/index.html b/docs/configuration/dynamic/index.html
index e686c3e41c2..0a2037c4df1 100644
--- a/docs/configuration/dynamic/index.html
+++ b/docs/configuration/dynamic/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -32,10 +32,10 @@
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/configuration/example/index.html b/docs/configuration/example/index.html
index a1e206cc4f3..3d1b2151430 100644
--- a/docs/configuration/example/index.html
+++ b/docs/configuration/example/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -80,10 +80,10 @@
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/configuration/hbase-run-models/index.html b/docs/configuration/hbase-run-models/index.html
index 90839180070..754eecbce7f 100644
--- a/docs/configuration/hbase-run-models/index.html
+++ b/docs/configuration/hbase-run-models/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -107,10 +107,10 @@ information that was originally in this section has been moved there.</p></div><
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/configuration/important/index.html b/docs/configuration/important/index.html
index 7a24d100124..90515d73ac4 100644
--- a/docs/configuration/important/index.html
+++ b/docs/configuration/important/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -188,10 +188,10 @@ API</a>.</p></div></div></div>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/configuration/index.html b/docs/configuration/index.html
index 948a965e58b..cebbd96afc5 100644
--- a/docs/configuration/index.html
+++ b/docs/configuration/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -54,10 +54,10 @@ configuration is an exception to this, to be described later below.</p></div></d
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/contributing-to-documentation/index.html b/docs/contributing-to-documentation/index.html
index ce63f13d84c..302011584f6 100644
--- a/docs/contributing-to-documentation/index.html
+++ b/docs/contributing-to-documentation/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -182,10 +182,10 @@ number to the name of the new patch.</p></div><div class="fd-step">After a chang
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/cp/index.html b/docs/cp/index.html
index fd25155c3d0..5d0a6a22733 100644
--- a/docs/cp/index.html
+++ b/docs/cp/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -660,10 +660,10 @@ set: <code>arg1=1,arg2=2</code>. These could have been added to <code>hbase-site
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/datamodel/index.html b/docs/datamodel/index.html
index aaed619b209..11e4605c86c 100644
--- a/docs/datamodel/index.html
+++ b/docs/datamodel/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -395,10 +395,10 @@ Lars Hofhansl has also written a note on <a href="http://hadoop-hbase.blogspot.c
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/external-apis/index.html b/docs/external-apis/index.html
index 76012c71a32..0ce412faa39 100644
--- a/docs/external-apis/index.html
+++ b/docs/external-apis/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -1025,10 +1025,10 @@ non-Base64 encoded cell name.</p></div></div></div>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/faq/index.html b/docs/faq/index.html
index a014a6a3ebf..616a0593af6 100644
--- a/docs/faq/index.html
+++ b/docs/faq/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -98,10 +98,10 @@
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/getting-started/index.html b/docs/getting-started/index.html
index 2908029cca7..d91f482c8c5 100644
--- a/docs/getting-started/index.html
+++ b/docs/getting-started/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -157,10 +157,10 @@ about ZooKeeper configuration, including using an external ZooKeeper instance wi
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/hbase-apis/index.html b/docs/hbase-apis/index.html
index be56abeabb7..18f956c15fc 100644
--- a/docs/hbase-apis/index.html
+++ b/docs/hbase-apis/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -122,10 +122,10 @@ See <a href="/docs/external-apis" data-discover="true">Apache HBase External API
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/hbase-history/index.html b/docs/hbase-history/index.html
index 58a920f4fbe..9421061eff9 100644
--- a/docs/hbase-history/index.html
+++ b/docs/hbase-history/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -34,10 +34,10 @@
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/hbase-incompatibilities/index.html b/docs/hbase-incompatibilities/index.html
index 5b28b051d51..a3abb4839cc 100644
--- a/docs/hbase-incompatibilities/index.html
+++ b/docs/hbase-incompatibilities/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -349,10 +349,10 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/hbtop/index.html b/docs/hbtop/index.html
index 1ece1107914..f765f7b4c44 100644
--- a/docs/hbtop/index.html
+++ b/docs/hbtop/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="image" href="/assets/top_screen-CWb803TC.gif" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPriority="auto"/><link rel="preload" as="image" href="/assets/scrolling_metric_records-DdLjDZmk.gif" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="image" href="/assets/top_screen-CWb803TC.gif" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPriority="auto"/><link rel="preload" as="image" href="/assets/scrolling_metric_records-DdLjDZmk.gif" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -107,10 +107,10 @@ The top screen is refreshed in a certain period – 3 seconds by default.</p>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/hfile-format/index.html b/docs/hfile-format/index.html
index 57f1da0b12a..61411b5fe63 100644
--- a/docs/hfile-format/index.html
+++ b/docs/hfile-format/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="image" href="/assets/hfile-DV-hIcTP.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPriority="auto"/><link rel="preload" as="image" href="/assets/hfilev2-O8X0wV-5.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPriority=" [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="image" href="/assets/hfile-DV-hIcTP.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPriority="auto"/><link rel="preload" as="image" href="/assets/hfilev2-O8X0wV-5.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPriority=" [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -239,10 +239,10 @@ For more information see <a href="/docs/security/data-access#transparent-encrypt
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/index.html b/docs/index.html
index e8e97093d09..ead701c8295 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -83,10 +83,10 @@ such features or use patterns.</p></div><a href="https://github.com/apache/hbase
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/inmemory-compaction/index.html b/docs/inmemory-compaction/index.html
index 0513011d5bb..4b041ff52d2 100644
--- a/docs/inmemory-compaction/index.html
+++ b/docs/inmemory-compaction/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -90,10 +90,10 @@ family Store named <em>family</em> configured to use a <em>CompactingMemStore</e
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/mapreduce/index.html b/docs/mapreduce/index.html
index 73294cb3f6e..69b9ba61c86 100644
--- a/docs/mapreduce/index.html
+++ b/docs/mapreduce/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -432,10 +432,10 @@ Especially for longer running jobs, speculative execution will create duplicate
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/offheap-read-write/index.html b/docs/offheap-read-write/index.html
index 48ae2302335..1bb75458f98 100644
--- a/docs/offheap-read-write/index.html
+++ b/docs/offheap-read-write/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="image" href="/assets/offheap-overview-DTGpchw3.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPriority="auto"/><link rel="preload" as="image" href="/assets/bytebuff-allocator-stats-B7DU8asJ.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="image" href="/assets/offheap-overview-DTGpchw3.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPriority="auto"/><link rel="preload" as="image" href="/assets/bytebuff-allocator-stats-B7DU8asJ.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -173,10 +173,10 @@ regions are selected for forced flushes.</p></div><a href="https://github.com/ap
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/operational-management/backup-and-snapshots/index.html b/docs/operational-management/backup-and-snapshots/index.html
index 862647e893d..8fde91299f0 100644
--- a/docs/operational-management/backup-and-snapshots/index.html
+++ b/docs/operational-management/backup-and-snapshots/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -181,10 +181,10 @@ Storage</a>.</p></div></div></div>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/operational-management/cluster-replication/index.html b/docs/operational-management/cluster-replication/index.html
index f35a3b4c0bc..2786ba242a1 100644
--- a/docs/operational-management/cluster-replication/index.html
+++ b/docs/operational-management/cluster-replication/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="image" href="/assets/hbase_replication_diagram-pmf_4kSh.jpg" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPriority="auto"/><link rel="preload" as="image" href="/assets/replication_overview-CONFSRqj.png" imageSizes="(max-width: 768px) 100vw, (max-width: 120 [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="image" href="/assets/hbase_replication_diagram-pmf_4kSh.jpg" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPriority="auto"/><link rel="preload" as="image" href="/assets/replication_overview-CONFSRqj.png" imageSizes="(max-width: 768px) 100vw, (max-width: 120 [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -373,10 +373,10 @@ in favor of discussions about cluster topologies appropriate for different scena
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/operational-management/index.html b/docs/operational-management/index.html
index 0031e7f05a0..b09fce17fab 100644
--- a/docs/operational-management/index.html
+++ b/docs/operational-management/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -29,10 +29,10 @@
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/operational-management/metrics-and-monitoring/index.html b/docs/operational-management/metrics-and-monitoring/index.html
index bfe5092dc06..9874557ef22 100644
--- a/docs/operational-management/metrics-and-monitoring/index.html
+++ b/docs/operational-management/metrics-and-monitoring/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="image" href="/assets/bc_basic-BTMl5eCr.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPriority="auto"/><link rel="preload" as="image" href="/assets/bc_config-Ceg8MoFC.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPrior [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="image" href="/assets/bc_basic-BTMl5eCr.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPriority="auto"/><link rel="preload" as="image" href="/assets/bc_config-Ceg8MoFC.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPrior [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -410,10 +410,10 @@ recommended to turn on this feature only during debugging.</p></div></div></div>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/operational-management/node/index.html b/docs/operational-management/node/index.html
index 66deab53807..b76c867507e 100644
--- a/docs/operational-management/node/index.html
+++ b/docs/operational-management/node/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -126,10 +126,10 @@ the datanode.</p></div></div></div>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/operational-management/region-and-capacity/index.html b/docs/operational-management/region-and-capacity/index.html
index f97bbf36281..99ed073d58d 100644
--- a/docs/operational-management/region-and-capacity/index.html
+++ b/docs/operational-management/region-and-capacity/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -273,10 +273,10 @@ Administration</p></div></div></div>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/operational-management/running-multiple-workloads-on-a-single-cluster/index.html b/docs/operational-management/running-multiple-workloads-on-a-single-cluster/index.html
index 55fa0b8a7dc..7ae03c37513 100644
--- a/docs/operational-management/running-multiple-workloads-on-a-single-cluster/index.html
+++ b/docs/operational-management/running-multiple-workloads-on-a-single-cluster/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -205,10 +205,10 @@ will always return false.</p></div></div></div>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/operational-management/table-rename/index.html b/docs/operational-management/table-rename/index.html
index a070215547b..21adcfa0838 100644
--- a/docs/operational-management/table-rename/index.html
+++ b/docs/operational-management/table-rename/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -44,10 +44,10 @@
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/operational-management/tools/index.html b/docs/operational-management/tools/index.html
index 7a617866fc1..a955911c2f5 100644
--- a/docs/operational-management/tools/index.html
+++ b/docs/operational-management/tools/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -693,10 +693,10 @@ tables/regions/families target for a given compaction run.</p></div></div></div>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/orca/index.html b/docs/orca/index.html
index 363be66c00c..ecea1900bbb 100644
--- a/docs/orca/index.html
+++ b/docs/orca/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="image" href="/assets/large-logo-CXfkkzJH.svg" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPriority="auto"/><link rel="preload" as="image" href="/assets/dark-theme-large-logo-BoBjg19n.svg" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900 [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="image" href="/assets/large-logo-CXfkkzJH.svg" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPriority="auto"/><link rel="preload" as="image" href="/assets/dark-theme-large-logo-BoBjg19n.svg" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900 [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -35,10 +35,10 @@
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/other-info/index.html b/docs/other-info/index.html
index ce452f120bc..9271c54c847 100644
--- a/docs/other-info/index.html
+++ b/docs/other-info/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -53,10 +53,10 @@
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/performance/index.html b/docs/performance/index.html
index 04034d0365e..6ebbd6507f0 100644
--- a/docs/performance/index.html
+++ b/docs/performance/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -376,10 +376,10 @@ HDFS files open all the time, this can add up quickly.</p></div></div></div>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/profiler/index.html b/docs/profiler/index.html
index 9c88432b051..6b15f198b85 100644
--- a/docs/profiler/index.html
+++ b/docs/profiler/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -93,10 +93,10 @@ or direct interaction with the infoserver.</p>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/protobuf/index.html b/docs/protobuf/index.html
index cf8feec1e65..a09f8d819b3 100644
--- a/docs/protobuf/index.html
+++ b/docs/protobuf/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -185,10 +185,10 @@ plugin.</p></div><a href="https://github.com/apache/hbase/edit/master/hbase-webs
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/pv2/index.html b/docs/pv2/index.html
index 4a690a33fea..ac6404d5b04 100644
--- a/docs/pv2/index.html
+++ b/docs/pv2/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -125,10 +125,10 @@ It is easy to confuse the state that the Procedure itself is keeping with that o
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/regionserver-sizing/index.html b/docs/regionserver-sizing/index.html
index 64794e4d7a5..fea20359146 100644
--- a/docs/regionserver-sizing/index.html
+++ b/docs/regionserver-sizing/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -675,10 +675,10 @@ for more information.</p></div></div></div>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/rpc/index.html b/docs/rpc/index.html
index d88b61c346c..befae1eb02d 100644
--- a/docs/rpc/index.html
+++ b/docs/rpc/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -159,10 +159,10 @@ The server will return cellblocks compressed using this same compressor as long
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/schema-design/index.html b/docs/schema-design/index.html
index 0c32107bab4..652d82a1d8a 100644
--- a/docs/schema-design/index.html
+++ b/docs/schema-design/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -63,10 +63,10 @@ table to be disabled.</p></div></div></div>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/security/client-access/index.html b/docs/security/client-access/index.html
index 3921fc0b857..45efcc70af3 100644
--- a/docs/security/client-access/index.html
+++ b/docs/security/client-access/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -229,10 +229,10 @@ work with Thrift framed transport at this time.</p></div></div></div>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/security/data-access/index.html b/docs/security/data-access/index.html
index 0f4c8f32286..e8b56c8c1b5 100644
--- a/docs/security/data-access/index.html
+++ b/docs/security/data-access/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -496,10 +496,10 @@ any more. Just set hbase.regionserver.wal.encryption to true is enough to enable
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/security/example/index.html b/docs/security/example/index.html
index 3478f1765e4..2d03a7ed2c4 100644
--- a/docs/security/example/index.html
+++ b/docs/security/example/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -146,10 +146,10 @@ any more. Just set hbase.regionserver.wal.encryption to true is enough to enable
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/security/hdfs-and-zookeeper-access/index.html b/docs/security/hdfs-and-zookeeper-access/index.html
index f1034e710ac..d4dc7d41b65 100644
--- a/docs/security/hdfs-and-zookeeper-access/index.html
+++ b/docs/security/hdfs-and-zookeeper-access/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -36,10 +36,10 @@
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/security/index.html b/docs/security/index.html
index 61008998aa1..027a0ae1e2b 100644
--- a/docs/security/index.html
+++ b/docs/security/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -34,10 +34,10 @@ contact you to follow up on your report.</p></div></div></div>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/security/tls/index.html b/docs/security/tls/index.html
index 536b83b1f48..1ca1066da4d 100644
--- a/docs/security/tls/index.html
+++ b/docs/security/tls/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -172,10 +172,10 @@ inter-cluster replication.</p></div></div></div></div></div>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/security/user-access/index.html b/docs/security/user-access/index.html
index 6427cab845c..2f878e30f01 100644
--- a/docs/security/user-access/index.html
+++ b/docs/security/user-access/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -94,10 +94,10 @@
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/security/web-ui/index.html b/docs/security/web-ui/index.html
index 874c4df96f7..31091d3ff62 100644
--- a/docs/security/web-ui/index.html
+++ b/docs/security/web-ui/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -187,10 +187,10 @@
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/shell/index.html b/docs/shell/index.html
index 943ce1c016d..0faef08dc93 100644
--- a/docs/shell/index.html
+++ b/docs/shell/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -324,10 +324,10 @@ Default is to fetch one row at a time.</p></div><a href="https://github.com/apac
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/single-page/index.html b/docs/single-page/index.html
index 7679feb6af2..30199f4a853 100644
--- a/docs/single-page/index.html
+++ b/docs/single-page/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="image" href="/images/large-logo.svg"/><link rel="preload" as="image" href="/images/dark-theme-large-logo.svg"/><link rel="preload" as="image" href="/assets/region_split_process-DrwL5IoS.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPriority="auto"/><li [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="image" href="/images/large-logo.svg"/><link rel="preload" as="image" href="/images/dark-theme-large-logo.svg"/><link rel="preload" as="image" href="/assets/region_split_process-DrwL5IoS.png" imageSizes="(max-width: 768px) 100vw, (max-width: 1200px) 70vw, 900px" fetchPriority="auto"/><li [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -18132,10 +18132,10 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/spark/index.html b/docs/spark/index.html
index 357db6d13bc..9f381b63d92 100644
--- a/docs/spark/index.html
+++ b/docs/spark/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -569,10 +569,10 @@ user to execute SQL queries.</p>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/sql/index.html b/docs/sql/index.html
index 3b29a8dc73b..b4e615d6140 100644
--- a/docs/sql/index.html
+++ b/docs/sql/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -30,10 +30,10 @@
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/store-file-tracking/index.html b/docs/store-file-tracking/index.html
index 5e5feac7660..04bf928c073 100644
--- a/docs/store-file-tracking/index.html
+++ b/docs/store-file-tracking/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -113,10 +113,10 @@ is shown below:</p>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/sync-replication/index.html b/docs/sync-replication/index.html
index 1892e24d23e..d4b3f2de3a2 100644
--- a/docs/sync-replication/index.html
+++ b/docs/sync-replication/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -78,10 +78,10 @@ transiting ACTIVE to STANDBY has no problem, because we'll skip to replay t
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/thrift-filter-language/index.html b/docs/thrift-filter-language/index.html
index 2025b6fc675..84d6a9e2f13 100644
--- a/docs/thrift-filter-language/index.html
+++ b/docs/thrift-filter-language/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -215,10 +215,10 @@ It also takes two boolean variables to indicate whether to include the minColumn
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/tracing/index.html b/docs/tracing/index.html
index 97a2015d772..2017dc7d5bc 100644
--- a/docs/tracing/index.html
+++ b/docs/tracing/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -46,10 +46,10 @@ to collect and view tracing data instead of logging.</p></div></div></div>
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/troubleshooting/index.html b/docs/troubleshooting/index.html
index 68d1803cb1a..87ab0c136b3 100644
--- a/docs/troubleshooting/index.html
+++ b/docs/troubleshooting/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -802,10 +802,10 @@ of Red Hat Enterprise Linux, according to
console.error(error);
sessionStorage.removeItem(storageKey2);
}
- })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
+ })("react-router-scroll-positions", null)</script><script>window.__reactRouterContext = {"basename":"/","future":{"unstable_optimizeDeps":false,"unstable_subResourceIntegrity":false,"unstable_trailingSlashAwareDataRequests":false,"v8_middleware":false,"v8_splitRouteModules":false,"v8_viteEnvironmentApi":false},"routeDiscovery":{"mode":"initial"},"ssr":false,"isSpaMode":false};window.__reactRouterContext.stream = new ReadableStream({start(controller){window.__reactRouterContext.streamCo [...]
import * as route0 from "/assets/root-DCifVNB4.js";
import * as route1 from "/assets/docs-layout-DXv1WpCa.js";
-import * as route2 from "/assets/docs-96Mc0fjB.js";
+import * as route2 from "/assets/docs-DkZb4eNt.js";
window.__reactRouterRouteModules = {"root":route0,"pages/_docs/docs-layout":route1,"routes/_docs/docs":route2};
diff --git a/docs/unit-testing/index.html b/docs/unit-testing/index.html
index 5469c22dde9..b791e403390 100644
--- a/docs/unit-testing/index.html
+++ b/docs/unit-testing/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-e10010b0.js"/><link rel="mo [...]
+<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/favicon.ico"/><link rel="preload" as="font" href="/fonts/inter-latin-wght-normal.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="prefetch" as="font" href="/fonts/inter-latin-wght-italic.woff2" type="font/woff2" crossorigin="anonymous"/><link rel="modulepreload" href="/assets/manifest-efc3e3b7.js"/><link rel="mo [...]
(function() {
const theme = localStorage.getItem('theme');
const root = document.documentElement;
@@ -306,10 +306,10 @@ integration testing.</p></div></div></div>
console.error(error);
... 273054 lines suppressed ...