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

Julian Reschke reopened OAK-12147:
----------------------------------

This change causes an additional (OSGi) import of java.lang.runtime. We need to 
understand why because it can cause issues when run inside OSGi containers.

No idea why our OSGi ITs are not affected.

> Introduce Oak Cache API interfaces in oak-core-spi
> --------------------------------------------------
>
>                 Key: OAK-12147
>                 URL: https://issues.apache.org/jira/browse/OAK-12147
>             Project: Jackrabbit Oak
>          Issue Type: Sub-task
>            Reporter: Rishabh Daim
>            Assignee: Rishabh Daim
>            Priority: Critical
>             Fix For: 2.0.0
>
>
> Introduce a new Oak-owned cache API in org.apache.jackrabbit.oak.cache so 
> that all Oak modules depend on stable interfaces rather than Guava shim or 
> Caffeine types directly.
>   New files:
>   - OakCache<K,V> — base interface with:
>     - getIfPresent(K) → @Nullable V
>     - get(K, Function<? super K, ? extends V>) → @Nullable V 
> (Caffeine-aligned, unchecked — replaces the Callable-based API)
>     - put(K, V)
>     - invalidate(K)
>     - invalidateAll()
>     - invalidateAll(Iterable) (no Oak module currently calls this; can be 
> removed if decided)
>     - estimatedSize() → long (no Oak module currently calls this directly; 
> can be removed if decided)
>     - stats() → OakCacheStats
>     - asMap() → ConcurrentMap<K, V>
>     - getAllPresent(Iterable) → Map<K, V> (no Oak module currently calls 
> this; CacheLIRS throws UnsupportedOperationException; can be removed if 
> decided)
>     - cleanUp() (no Oak module currently calls this; CacheLIRS is a no-op; 
> can be removed if decided)
>   - OakLoadingCache<K,V> extends OakCache — get(K) returns @NotNull V, throws 
> CompletionException on loader failure; refresh(K)
>   - OakCacheLoader<K,V> — functional interface: V load(K) throws Exception
>   - OakWeigher<K,V> — functional interface: int weigh(K, V)
>   - OakRemovalCause — enum: EXPLICIT, REPLACED, SIZE, EXPIRED, COLLECTED
>   - OakRemovalListener<K,V> — functional interface: void onRemoval(K, V, 
> OakRemovalCause)
>   - OakCacheStats — immutable value object: hitCount, missCount, 
> loadSuccessCount, loadFailureCount, totalLoadTime, evictionCount; methods 
> minus(), hitRate(), missRate(), requestCount()
>   - CacheImplementation — enum: LIRS, CAFFEINE; used by OakCacheBuilder for 
> per-module backend override
>   No changes to AbstractCacheStats, CacheStats, or CacheLIRS. All existing 
> call sites continue to compile unchanged.
>   Acceptance criteria:
>   - oak-core-spi compiles; no new Caffeine or Guava types in the public API 
> surface
>   - All existing oak-core-spi tests pass (CacheTest, CacheSizeTest, 
> ConcurrentTest, ConcurrentPerformanceTest)
>   - No consumer module is changed; all existing CacheLIRS.newBuilder() and 
> new CacheStats(guavaCache, ...) call sites still compile



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

Reply via email to