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

Vladimir Rodionov reassigned HBASE-30205:
-----------------------------------------

    Assignee: Vladimir Rodionov

> Add CacheAccessService factory helpers for legacy BlockCache-backed 
> implementations
> -----------------------------------------------------------------------------------
>
>                 Key: HBASE-30205
>                 URL: https://issues.apache.org/jira/browse/HBASE-30205
>             Project: HBase
>          Issue Type: New Feature
>          Components: BlockCache
>    Affects Versions: 4.0.0-alpha-1
>            Reporter: Vladimir Rodionov
>            Assignee: Vladimir Rodionov
>            Priority: Major
>
> As part of the pluggable block cache refactoring, CacheAccessService is 
> becoming the HBase-facing facade for block cache lookup, insertion, 
> invalidation, and lifecycle operations.
> Currently, CacheAccessService can be obtained from CacheConfig, where an 
> existing BlockCache instance is wrapped by 
> BlockCacheBackedCacheAccessService. This works for production paths that 
> already have CacheConfig, but it is inconvenient for tests and other code 
> paths that directly instantiate concrete BlockCache implementations such as 
> LruBlockCache, LruAdaptiveBlockCache, TinyLfuBlockCache, or BucketCache.
> There are still many valid direct uses of concrete BlockCache 
> implementations, especially in unit tests that verify cache-specific 
> behavior. Those tests should not be mechanically migrated away from concrete 
> cache constructors. However, tests and integration code that need to exercise 
> the new CacheAccessService-facing path should have a simple factory method 
> for wrapping an existing BlockCache instance.
> Proposed approach:
> * Add factory helpers to CacheAccessServices for creating CacheAccessService 
> instances from existing BlockCache objects.
> * Support wrapping both direct BlockCache instances and Optional<BlockCache>.
> * Return a disabled/no-op CacheAccessService when the optional BlockCache is 
> empty.
> * Keep existing concrete BlockCache constructors unchanged.
> * Keep BlockCacheFactory unchanged in this ticket.
> * Use the new factory helpers in tests or integration code that needs 
> CacheAccessService but still constructs legacy BlockCache implementations 
> directly.
> Example API shape:
> {code:java}
> CacheAccessService service =
>   CacheAccessServices.fromBlockCache(blockCache);
> CacheAccessService service =
>   CacheAccessServices.fromBlockCache(optionalBlockCache);
> {code}
> This preserves the current compatibility model:
> {noformat}
> Legacy cache implementation
>   -> BlockCache
>   -> BlockCacheBackedCacheAccessService
>   -> CacheAccessService
> {noformat}
> This ticket is a bridge step. A later factory-wiring ticket can make 
> BlockCacheFactory or a new cache factory assemble CacheAccessService, 
> CacheTopology, and CacheEngine implementations directly. This ticket should 
> only provide the missing factory helpers needed during the compatibility 
> migration.
> Out of scope:
> * Do not refactor BlockCacheFactory.
> * Do not replace direct constructors of LruBlockCache, LruAdaptiveBlockCache, 
> TinyLfuBlockCache, or BucketCache.
> * Do not migrate implementation-specific cache tests away from concrete cache 
> classes.
> * Do not introduce CacheEngine adapters in this ticket.
> * Do not change cache read/write semantics.
> Acceptance criteria:
> * CacheAccessServices can create a CacheAccessService from a non-null 
> BlockCache.
> * CacheAccessServices can create a CacheAccessService from 
> Optional<BlockCache>.
> * Optional.empty() maps to the disabled/no-op CacheAccessService.
> * Null inputs are rejected consistently.
> * Unit tests cover the new factory helpers.
> * Existing BlockCache-backed behavior remains unchanged.



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

Reply via email to