Skip to content

Commit 9dc706f

Browse files
committed
Finished caffeine migration
1 parent b1e766e commit 9dc706f

File tree

5 files changed

+19
-23
lines changed

5 files changed

+19
-23
lines changed

feature-flag/build.gradle.kts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ dependencies {
1111

1212
// This dependency is used internally, and not exposed to consumers on their own compile classpath.
1313
implementation(libs.slf4j.api)
14-
implementation(libs.guava)
14+
implementation(libs.guava) // hashing
15+
implementation(libs.bundles.caffine)
1516
implementation(libs.bundles.jdbi)
1617

1718
// Immutables

feature-flag/src/main/java/org/codeheadsystems/featureflag/manager/FeatureManager.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package org.codeheadsystems.featureflag.manager;
22

3-
import com.google.common.cache.CacheBuilder;
3+
import com.github.benmanes.caffeine.cache.Caffeine;
44
import java.time.Duration;
55
import java.util.ArrayList;
66
import java.util.List;
@@ -77,16 +77,16 @@ class Builder {
7777
private EnablementFactory enablementFactory;
7878
private FeatureLookupManager featureLookupManager;
7979
private FeatureManagerConfiguration configuration;
80-
private CacheBuilder<String, Enablement> cacheBuilder;
80+
private Caffeine<String, Enablement> cacheBuilder;
8181
private List<Decorator<FeatureManager>> featureManagerDecorator = new ArrayList<>();
8282
private List<Decorator<FeatureLookupManager>> featureLookupManagerDecorator = new ArrayList<>();
8383

84-
private static CacheBuilder<String, Enablement> getDefaultCacheBuilder() {
85-
return CacheBuilder.newBuilder()
84+
private static Caffeine<String, Enablement> getDefaultCacheBuilder() {
85+
return Caffeine.newBuilder()
8686
.maximumSize(100) // oh god, like we will have 100 features?
8787
.refreshAfterWrite(Duration.ofSeconds(60)) // refresh from source every 60seconds
8888
.expireAfterAccess(Duration.ofSeconds(600)) // expire after 600 seconds of inactivity
89-
.removalListener(notification -> LOGGER.trace("removalListener({})", notification.getKey()));
89+
.removalListener((key,value, cause) -> LOGGER.trace("removalListener({})", key));
9090
}
9191

9292
/**
@@ -150,7 +150,7 @@ public FeatureManagerImpl.Builder withConfiguration(final FeatureManagerConfigur
150150
* @param cacheBuilder the configuration
151151
* @return the builder
152152
*/
153-
public FeatureManagerImpl.Builder withCacheBuilder(final CacheBuilder<String, Enablement> cacheBuilder) {
153+
public FeatureManagerImpl.Builder withCacheBuilder(final Caffeine<String, Enablement> cacheBuilder) {
154154
this.cacheBuilder = cacheBuilder;
155155
return this;
156156
}
@@ -211,7 +211,7 @@ public FeatureManagerConfiguration getConfiguration() {
211211
*
212212
* @return the cache builder
213213
*/
214-
public CacheBuilder<String, Enablement> getCacheBuilder() {
214+
public Caffeine<String, Enablement> getCacheBuilder() {
215215
return cacheBuilder;
216216
}
217217
}

feature-flag/src/main/java/org/codeheadsystems/featureflag/manager/impl/FeatureManagerImpl.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package org.codeheadsystems.featureflag.manager.impl;
22

3-
import com.google.common.cache.CacheLoader;
4-
import com.google.common.cache.LoadingCache;
5-
import com.google.common.util.concurrent.UncheckedExecutionException;
6-
import java.util.concurrent.ExecutionException;
3+
import com.github.benmanes.caffeine.cache.LoadingCache;
74
import org.codeheadsystems.featureflag.factory.Enablement;
85
import org.codeheadsystems.featureflag.factory.EnablementFactory;
96
import org.codeheadsystems.featureflag.manager.FeatureLookupManager;
@@ -31,9 +28,8 @@ public FeatureManagerImpl(final Builder builder) {
3128
this.enablementFactory = builder.getEnablementFactory();
3229
this.featureLookupManager = builder.getFeatureLookupManager();
3330
this.featureEnablementCache = builder.getCacheBuilder()
34-
.build(CacheLoader.asyncReloading(
35-
CacheLoader.from(this::lookup),
36-
builder.getConfiguration().cacheLoaderExecutor()));
31+
.executor(builder.getConfiguration().cacheLoaderExecutor())
32+
.build(this::lookup);
3733
LOGGER.info("FeatureManager({},{},{})", builder.getConfiguration(), featureLookupManager, enablementFactory);
3834
}
3935

@@ -55,7 +51,7 @@ private Enablement lookup(String featureId) {
5551
public boolean isEnabled(String featureId, String discriminator) {
5652
try {
5753
return featureEnablementCache.get(featureId).enabled(discriminator);
58-
} catch (ExecutionException | UncheckedExecutionException e) {
54+
} catch (RuntimeException e) {
5955
LOGGER.error("Error getting feature enablement for: {}:{}", featureId, discriminator, e);
6056
return false;
6157
}

local-queue/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ plugins {
55
}
66

77
dependencies {
8-
implementation (libs.guava) // for hashing
8+
implementation(libs.bundles.caffine)
99
implementation(libs.dropwizard4.core)
1010
api(libs.micrometer.core)
1111
implementation(libs.slf4j.api)

local-queue/src/main/java/com/codeheadsystems/queue/factory/MessageFactory.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,9 @@
44

55
import com.codeheadsystems.queue.ImmutableMessage;
66
import com.codeheadsystems.queue.Message;
7+
import com.github.benmanes.caffeine.cache.Caffeine;
8+
import com.github.benmanes.caffeine.cache.LoadingCache;
79
import com.google.common.base.Charsets;
8-
import com.google.common.cache.CacheBuilder;
9-
import com.google.common.cache.CacheLoader;
10-
import com.google.common.cache.LoadingCache;
1110
import com.google.common.hash.HashFunction;
1211
import com.google.common.hash.Hashing;
1312
import java.time.Clock;
@@ -34,9 +33,9 @@ public class MessageFactory {
3433
@Inject
3534
public MessageFactory(final Clock clock) {
3635
this.clock = clock;
37-
this.hashFunctionCache = CacheBuilder.newBuilder()
36+
this.hashFunctionCache = Caffeine.newBuilder()
3837
.maximumSize(10) // TODO: Set this ina configuration
39-
.build(CacheLoader.from(this::generateHashFunction));
38+
.build(this::generateHashFunction);
4039
LOGGER.info("MessageFactory({})", clock);
4140
}
4241

@@ -54,7 +53,7 @@ private HashFunction generateHashFunction(final String messageType) {
5453
public Message createMessage(final String messageType,
5554
final String payload) {
5655
LOGGER.trace("createMessage({},{})", messageType, payload);
57-
final HashFunction hashFunction = hashFunctionCache.getUnchecked(messageType);
56+
final HashFunction hashFunction = hashFunctionCache.get(messageType);
5857
return ImmutableMessage.builder()
5958
.timestamp(clock.instant().toEpochMilli())
6059
.messageType(messageType)

0 commit comments

Comments
 (0)