[
https://issues.apache.org/jira/browse/OAK-12186?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Rishabh Daim resolved OAK-12186.
--------------------------------
Fix Version/s: 2.2.0
Resolution: Won't Fix
> CacheFactory wiring and CacheBuilder decoupling [oak-core-spi]
> --------------------------------------------------------------
>
> Key: OAK-12186
> URL: https://issues.apache.org/jira/browse/OAK-12186
> Project: Jackrabbit Oak
> Issue Type: Technical task
> Reporter: Rishabh Daim
> Assignee: Rishabh Daim
> Priority: Major
> Fix For: 2.2.0
>
>
> {color:#871094}CacheFactory wiring and CacheBuilder decoupling [oak-core-spi]
> — part of [OAK-12148](https://issues.apache.org/jira/browse/OAK-12148)
> {color}{color:#871094}
> {color}{color:#0033b3}**{color}Depends on:{color:#0033b3}** {color}TASK-1.1
> (CacheFactory interface), OAK-12148 (TASK-2)
> {color:#0033b3}**{color}Independent of:{color:#0033b3}** {color}TASK-3
> through TASK-14 (those tasks depend on OAK-12148, not on this)
> {color:#0033b3}### {color}What changes
> {color:#0033b3}-
> `{color}oak-core-spi/.../cache/api/CacheBuilder.java{color:#0033b3}` {color}—
> update {color:#0033b3}`{color}build(){color:#0033b3}` {color}and
> {color:#0033b3}`{color}build(CacheLoader){color:#0033b3}` {color}to delegate
> to {color:#0033b3}`{color}CacheFactory.getInstance(){color:#0033b3}`
> {color}instead of directly instantiating
> {color:#0033b3}`{color}CaffeineCacheAdapter{color:#0033b3}`{color}; remove
> imports of
> {color:#0033b3}`{color}com.github.benmanes.caffeine.cache.Caffeine{color:#0033b3}`{color},
> {color:#0033b3}`{color}CaffeineCacheAdapter{color:#0033b3}`{color},
> {color:#0033b3}`{color}CaffeineLoadingCacheAdapter{color:#0033b3}`{color};
> remove private methods {color:#0033b3}`{color}buildCaffeine(){color:#0033b3}`
> {color}and
> {color:#0033b3}`{color}configureCaffeineBuilder(){color:#0033b3}`{color}; add
> public getters for all 10 config fields so
> {color:#0033b3}`{color}CaffeineCacheFactory{color:#0033b3}` {color}can read
> them: {color:#0033b3}`{color}getMaximumWeight(){color:#0033b3}`{color},
> {color:#0033b3}`{color}getMaximumSize(){color:#0033b3}`{color},
> {color:#0033b3}`{color}getInitialCapacity(){color:#0033b3}`{color},
> {color:#0033b3}`{color}getWeigher(){color:#0033b3}`{color},
> {color:#0033b3}`{color}getEvictionListener(){color:#0033b3}`{color},
> {color:#0033b3}`{color}isRecordStats(){color:#0033b3}`{color},
> {color:#0033b3}`{color}getExpireAfterAccess(){color:#0033b3}`{color},
> {color:#0033b3}`{color}getExpireAfterWrite(){color:#0033b3}`{color},
> {color:#0033b3}`{color}getRefreshAfterWrite(){color:#0033b3}`{color},
> {color:#0033b3}`{color}getTicker(){color:#0033b3}`
> {color}{color:#0033b3}
> {color}{color:#0033b3}-
> `{color}oak-core-spi/.../cache/impl/caffeine/CaffeineCacheFactory.java{color:#0033b3}`
> {color}— {color:#0033b3}**{color}new{color:#0033b3}** {color}class
> implementing {color:#0033b3}`{color}CacheFactory{color:#0033b3}`{color};
> contains all Caffeine wiring extracted from the deleted
> {color:#0033b3}`{color}CacheBuilder{color:#0033b3}` {color}methods (reads
> config via the new getters, calls
> {color:#0033b3}`{color}Caffeine.newBuilder(){color:#0033b3}`{color}, applies
> weigher / eviction listener / expiry / ticker, wraps result in
> {color:#0033b3}`{color}CaffeineCacheAdapter{color:#0033b3}` {color}/
> {color:#0033b3}`{color}CaffeineLoadingCacheAdapter{color:#0033b3}`{color})
> {color:#0033b3}-
> `{color}oak-core-spi/src/main/resources/META-INF/services/org.apache.jackrabbit.oak.cache.api.CacheFactory{color:#0033b3}`
> {color}— {color:#0033b3}**{color}new{color:#0033b3}** {color}ServiceLoader
> registration:
> {color:#0033b3}`{color}org.apache.jackrabbit.oak.cache.impl.caffeine.CaffeineCacheFactory{color:#0033b3}`
> {color}{color:#0033b3}
> {color}{color:#0033b3}### {color}Acceptance criteria
> {color:#0033b3}- `{color}CacheBuilder{color:#0033b3}` {color}has zero imports
> from {color:#0033b3}`{color}com.github.benmanes.caffeine{color:#0033b3}`
> {color}or
> {color:#0033b3}`{color}org.apache.jackrabbit.oak.cache.impl{color:#0033b3}`
> {color}{color:#0033b3}- {color}All existing
> {color:#0033b3}`{color}CacheBuilderTest{color:#0033b3}` {color}tests pass
> unchanged (callers are unaffected)
> {color:#0033b3}- {color}New
> {color:#0033b3}`{color}CacheFactoryTest{color:#0033b3}`{color}:
> {color:#0033b3}`{color}CacheFactory.getInstance(){color:#0033b3}`
> {color}returns a non-null
> {color:#0033b3}`{color}CaffeineCacheFactory{color:#0033b3}` {color}via
> {color:#0033b3}`{color}ServiceLoader{color:#0033b3}`
> {color}{color:#0033b3}- {color}New
> {color:#0033b3}`{color}CaffeineCacheFactoryTest{color:#0033b3}`{color}:
> {color:#0033b3}`{color}build(config){color:#0033b3}` {color}and
> {color:#0033b3}`{color}build(config, loader){color:#0033b3}` {color}with all
> config combinations (maximumSize, maximumWeight+weigher, expiry,
> evictionListener, ticker, recordStats)
--
This message was sent by Atlassian Jira
(v8.20.10#820010)