[ 
https://issues.apache.org/jira/browse/HBASE-30363?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

ASF GitHub Bot updated HBASE-30363:
-----------------------------------
    Labels: pull-request-available  (was: )

> Migrate LruAdaptiveBlockCache to LruCacheEngine and adaptive 
> placement/admission policy
> ---------------------------------------------------------------------------------------
>
>                 Key: HBASE-30363
>                 URL: https://issues.apache.org/jira/browse/HBASE-30363
>             Project: HBase
>          Issue Type: New Feature
>          Components: BlockCache
>            Reporter: Vladimir Rodionov
>            Assignee: Vladimir Rodionov
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 4.0.0-alpha-1
>
>
> h2. Description
> {{LruAdaptiveBlockCache}} is currently implemented as a specialized subclass 
> of
> {{LruBlockCache}}.
> Most of its implementation and runtime behavior are inherited directly from 
> {{LruBlockCache}}.
> Its distinguishing behavior is an adaptive admission mechanism which reduces 
> the percentage of
> data blocks admitted to the cache when sustained eviction pressure is 
> detected, and gradually
> restores admission when that pressure decreases.
> With the pluggable block cache architecture, these responsibilities should be 
> separated:
> * local LRU storage and eviction belong to {{LruCacheEngine}};
> * admission and placement decisions belong to 
> {{CachePlacementAdmissionPolicy}}.
> Therefore, the native representation of AdaptiveLRU should not require a 
> separate
> {{AdaptiveLruCacheEngine}}. It should instead be composed from:
> {code}
> LruCacheEngine
>         +
> AdaptiveLruCachePlacementAdmissionPolicy
> {code}
> The adaptive policy requires feedback about capacity-driven cache evictions 
> in order to adjust
> future admission decisions. This ticket therefore also adds eviction 
> notification support to
> {{CachePlacementAdmissionPolicy}}.
> h2. Proposed Architecture
> The resulting cache path is:
> {code}
> TopologyBackedCacheAccessService
>         |
>         +-- CacheTopology
>         |       |
>         |       `-- LruCacheEngine
>         |
>         `-- AdaptiveLruCachePlacementAdmissionPolicy
> {code}
> {{LruCacheEngine}} remains responsible for:
> * block storage;
> * LRU replacement;
> * cache priority handling;
> * capacity management;
> * eviction execution;
> * reference counting;
> * cache size and element accounting;
> * cache statistics.
> {{AdaptiveLruCachePlacementAdmissionPolicy}} is responsible for:
> * tracking cache eviction pressure;
> * maintaining the current data-block admission level;
> * adjusting admission based on sustained eviction activity;
> * applying the adaptive admission decision to future cache writes.
> This keeps engine behavior independent from higher-level placement and 
> admission policy.
> h2. Eviction Feedback
> Add a default no-op capacity-driven eviction notification to
> {{CachePlacementAdmissionPolicy}}, for example:
> {code:java}
> default void onEviction(BlockCacheKey cacheKey, Cacheable block, CacheTier 
> sourceTier,
>   CacheTopologyView topologyView) {
> }
> {code}
> The notification allows stateful placement/admission policies to adapt based 
> on cache pressure
> without requiring cache engines to know about policy implementations.
> {{TopologyBackedCacheAccessService}} should forward capacity-driven
> {{CacheEngine}} eviction notifications to the active 
> {{CachePlacementAdmissionPolicy}}.
> The notification should represent cache-pressure eviction rather than 
> explicit administrative
> eviction.
> The existing default policy remains unaffected because the callback is a 
> no-op by default.
> h2. Adaptive Policy
> Introduce {{AdaptiveLruCachePlacementAdmissionPolicy}}.
> The adaptive algorithm should preserve the existing {{LruAdaptiveBlockCache}} 
> behavior as closely
> as possible.
> The policy should own only the adaptive state and decision logic currently 
> unique to
> {{LruAdaptiveBlockCache}}, including:
> * current data-block admission percentage;
> * eviction counters;
> * eviction-volume tracking;
> * measurement-window state;
> * heavy-eviction thresholds;
> * admission reduction and recovery logic.
> The existing algorithm should be migrated without unrelated behavioral 
> changes.
> The policy should reuse or delegate normal HBase cache placement behavior 
> where possible rather
> than duplicating the complete default placement implementation.
> h2. Topology Semantics
> {{CachePlacementAdmissionPolicy}} is a cache-graph-level policy. Cache 
> engines must not contain
> their own independent placement/admission policies.
> Adaptive admission therefore needs to respect the active topology.
> For a single-tier topology:
> {code}
> metadata block       -> SINGLE
> admitted data block  -> SINGLE
> rejected data block  -> not cached
> {code}
> For a tiered topology, adaptive rejection from L1 must not automatically 
> imply rejection from the
> entire cache hierarchy.
> For example, an L1 adaptive decision may result in:
> {code}
> data block -> do not place in L1
>            -> L2 may still receive the block according to topology/policy 
> semantics
> {code}
> The implementation must therefore avoid introducing conflicting policy 
> decisions inside individual
> {{CacheEngine}} instances.
> h2. Legacy Compatibility
> The legacy {{LruAdaptiveBlockCache}} cannot be removed as part of this ticket.
> Legacy cache construction still uses:
> {code}
> BlockCacheFactory -> BlockCache
> {code}
> while the new architecture uses:
> {code}
> CacheAccessService
>     -> CacheTopology
>     -> CacheEngine
>     -> CachePlacementAdmissionPolicy
> {code}
> The legacy {{BlockCacheFactory}} path should therefore continue to construct
> {{LruAdaptiveBlockCache}} where a {{BlockCache}} instance is required.
> The native {{CacheAccessService}} path should use:
> {code}
> LruCacheEngine
>         +
> AdaptiveLruCachePlacementAdmissionPolicy
> {code}
> {{LruAdaptiveBlockCache}} can be retired later after remaining 
> Region/RegionServer cache ownership
> and other legacy {{BlockCache}} consumers are migrated to 
> {{CacheAccessService}}.
> h2. Tests
> Add tests covering:
> * delivery of capacity-driven engine eviction notifications to
>   {{CachePlacementAdmissionPolicy}};
> * default policy behavior remaining unchanged when eviction notifications are 
> received;
> * adaptive eviction-pressure accounting;
> * reduction of data-block admission under sustained heavy eviction;
> * recovery of data-block admission when eviction pressure decreases;
> * metadata-block behavior;
> * data-block admission behavior matching existing AdaptiveLRU semantics;
> * single-tier AdaptiveLRU composition using {{LruCacheEngine}};
> * tiered behavior where an adaptive L1 decision does not incorrectly reject a 
> block from the
>   entire cache hierarchy;
> * native cache construction selecting {{LruCacheEngine}} together with
>   {{AdaptiveLruCachePlacementAdmissionPolicy}};
> * preservation of the legacy {{LruAdaptiveBlockCache}} construction path where
>   {{BlockCache}} is still required.
> h2. Acceptance Criteria
> * AdaptiveLRU can be represented natively as {{LruCacheEngine}} plus
>   {{AdaptiveLruCachePlacementAdmissionPolicy}}.
> * No {{AdaptiveLruCacheEngine}} implementation is introduced.
> * {{CachePlacementAdmissionPolicy}} can receive capacity-driven cache 
> eviction feedback.
> * Existing policies that do not require eviction feedback are unaffected.
> * Adaptive admission behavior is driven by eviction feedback from the cache 
> engine.
> * LRU storage and replacement logic is not duplicated in the adaptive policy.
> * Adaptive admission respects single-tier and tiered cache topology semantics.
> * The existing AdaptiveLRU configuration continues to work through the legacy
>   {{BlockCacheFactory}} path.
> * No existing {{BlockCache}} consumer is forced to migrate as part of this 
> ticket.
> * Tests verify both eviction-feedback propagation and AdaptiveLRU-specific 
> behavior.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to