Vladimir Rodionov created HBASE-30206:
-----------------------------------------

             Summary: Add test factory helpers for CacheAccessService-backed 
cache instances
                 Key: HBASE-30206
                 URL: https://issues.apache.org/jira/browse/HBASE-30206
             Project: HBase
          Issue Type: New Feature
          Components: BlockCache
    Affects Versions: 4.0.0-alpha-1
            Reporter: Vladimir Rodionov


As the block cache architecture migrates from direct BlockCache usage toward 
CacheAccessService, many tests still directly instantiate concrete BlockCache 
implementations such as LruBlockCache, LruAdaptiveBlockCache, 
TinyLfuBlockCache, and BucketCache.

Some of these direct constructors are appropriate because the tests verify 
implementation-specific cache behavior. However, many integration-style tests 
only need "a cache" for exercising HFile, CacheConfig, reader, writer, 
prefetch, or compaction behavior. Those tests should be able to use 
CacheAccessService without manually constructing a BlockCache, wrapping it, or 
building a large Configuration object for every case.

Currently, replacing a single direct constructor call with CacheAccessService 
setup can add unnecessary boilerplate. To make migration practical and 
readable, we should add test-only factory helpers that mirror the common 
existing cache constructors and return CacheAccessService instances.

Proposed approach:

* Add test utility factory methods for creating CacheAccessService instances 
backed by existing cache implementations.
* The helper methods should accept the same or very similar arguments as common 
existing cache constructors.
* Internally, these helpers may instantiate the legacy BlockCache 
implementation and wrap it using CacheAccessServices.fromBlockCache(...).
* Provide variants that return only CacheAccessService for integration-style 
tests.
* Provide holder/instance variants for tests that need both the concrete 
BlockCache and the CacheAccessService facade.
* Keep concrete implementation tests free to use direct constructors where they 
are testing cache-specific internals.

Example API shape:

{code:java}
CacheAccessService cache =
  CacheAccessServiceTestFactory.lru(maxSize, blockSize, evictionThread, conf);

CacheAccessService cache =
  CacheAccessServiceTestFactory.bucket(conf);

CacheAccessServiceTestInstance<LruBlockCache> cache =
  CacheAccessServiceTestFactory.lruInstance(maxSize, blockSize, evictionThread, 
conf);

CacheAccessService service = cache.service();
LruBlockCache lru = cache.blockCache();
{code}

This gives tests a concise migration path:

{noformat}
Before:
  new LruBlockCache(...)

After:
  CacheAccessServiceTestFactory.lru(...)
{noformat}

The implementation can initially remain legacy-backed:

{noformat}
test factory
  -> concrete BlockCache constructor
  -> CacheAccessServices.fromBlockCache(...)
  -> CacheAccessService
{noformat}

Later, when CacheEngine and topology-backed implementations are available, the 
test factory can be changed internally without rewriting all integration tests 
again.

Out of scope:

* Do not remove all direct concrete cache constructors from tests in this 
ticket.
* Do not change production cache construction.
* Do not refactor BlockCacheFactory.
* Do not require implementation-specific tests to use CacheAccessService.
* Do not introduce new cache engines in this ticket.
* Do not change cache read/write semantics.

Acceptance criteria:

* Test-only factory helpers exist for common legacy cache implementations.
* Factory helpers can create CacheAccessService instances backed by 
LruBlockCache, LruAdaptiveBlockCache, TinyLfuBlockCache, and BucketCache where 
practical.
* A holder/instance helper exists for tests that need both the concrete cache 
and the CacheAccessService facade.
* Null inputs are rejected consistently.
* Unit tests cover the new test factory helpers.
* At least a small number of integration-style tests are migrated to use the 
new helpers as examples.



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

Reply via email to