Skip to content

Commit 14bef34

Browse files
authored
Replace expiringMap with caffeine (#862)
* Replace expiringMap with caffeine * Use interface instead of implementation
1 parent 5fcc68e commit 14bef34

File tree

2 files changed

+13
-12
lines changed

2 files changed

+13
-12
lines changed

build.sbt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,9 +339,11 @@ lazy val `kamon-annotation` = (project in file("instrumentation/kamon-annotation
339339
assemblyShadeRules in assembly := Seq(
340340
ShadeRule.rename("javax.el.**" -> "kamon.lib.@0").inAll,
341341
ShadeRule.rename("com.sun.el.**" -> "kamon.lib.@0").inAll,
342+
ShadeRule.rename("com.github.ben-manes.**" -> "kamon.lib.@0").inAll,
342343
),
343344
libraryDependencies ++= Seq(
344345
kanelaAgent % "provided",
346+
"com.github.ben-manes.caffeine" % "caffeine" % "2.8.5" % "provided,shaded", // provided? no?
345347
"org.glassfish" % "javax.el" % "3.0.1-b11" % "provided,shaded",
346348
scalatest % "test",
347349
logbackClassic % "test",
@@ -637,4 +639,4 @@ val `kamon-bundle` = (project in file("bundle/kamon-bundle"))
637639
`kamon-akka-http` % "shaded",
638640
`kamon-play` % "shaded",
639641
`kamon-okhttp` % "shaded",
640-
)
642+
)

instrumentation/kamon-annotation/src/main/java/kamon/annotation/instrumentation/cache/AnnotationCache.java

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package kamon.annotation.instrumentation.cache;
1818

19+
import com.github.benmanes.caffeine.cache.Caffeine;
20+
import com.github.benmanes.caffeine.cache.RemovalListener;
1921
import kamon.Kamon;
2022
import kamon.annotation.api.Time;
2123
import kamon.annotation.api.TrackConcurrency;
@@ -24,29 +26,26 @@
2426
import kamon.metric.*;
2527
import kamon.tag.TagSet;
2628
import kamon.trace.SpanBuilder;
27-
import kanela.agent.libs.net.jodah.expiringmap.ExpirationListener;
28-
import kanela.agent.libs.net.jodah.expiringmap.ExpirationPolicy;
29-
import kanela.agent.libs.net.jodah.expiringmap.ExpiringMap;
3029
import kanela.agent.util.log.Logger;
3130

3231
import java.lang.reflect.Method;
3332
import java.util.Collections;
3433
import java.util.HashMap;
3534
import java.util.Map;
3635
import java.util.Objects;
36+
import java.util.concurrent.ConcurrentMap;
3737
import java.util.concurrent.TimeUnit;
3838

3939
public final class AnnotationCache {
4040

4141
private static Map<MetricKey, Object> metrics = buildCache();
4242

4343
private static Map<MetricKey, Object> buildCache() {
44-
return ExpiringMap
45-
.builder()
46-
.expiration(1, TimeUnit.MINUTES)
47-
.expirationPolicy(ExpirationPolicy.ACCESSED)
48-
.asyncExpirationListener(ExpirationListener())
49-
.build();
44+
return Caffeine.newBuilder()
45+
.expireAfterAccess(1, TimeUnit.MINUTES)
46+
.removalListener(LogExpirationListener())
47+
.build()
48+
.asMap();
5049
}
5150

5251
public static Gauge getGauge(Method method, Object obj, Class<?> clazz, String className, String methodName) {
@@ -193,8 +192,8 @@ private static String getOperationName(String name, Object obj, Class<?> clazz,
193192
return (evaluatedString.isEmpty() || evaluatedString.equals("unknown")) ? className + "." + methodName: evaluatedString;
194193
}
195194

196-
private static ExpirationListener<MetricKey, Object> ExpirationListener() {
197-
return (key, value) -> {
195+
private static RemovalListener<MetricKey, Object> LogExpirationListener() {
196+
return (key, value, cause) -> {
198197
if(value instanceof Instrument) ((Instrument) value).remove();
199198
Logger.debug(() -> "Expiring key: " + key + "with value" + value);
200199
};

0 commit comments

Comments
 (0)