You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Vladimir Rodionov (Jira)" <ji...@apache.org> on 2026/06/04 16:55:00 UTC

[jira] [Created] (HBASE-30206) Add test factory helpers for CacheAccessService-backed cache instances

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)