diff --git a/docs/changelog/132922.yaml b/docs/changelog/132922.yaml new file mode 100644 index 0000000000000..2457e8d81eaf8 --- /dev/null +++ b/docs/changelog/132922.yaml @@ -0,0 +1,5 @@ +pr: 132922 +summary: Change GeoIpCache and EnrichCache to LongAdder +area: Ingest Node +type: bug +issues: [] diff --git a/modules/ingest-geoip/src/main/java/org/elasticsearch/ingest/geoip/GeoIpCache.java b/modules/ingest-geoip/src/main/java/org/elasticsearch/ingest/geoip/GeoIpCache.java index 08067379bc0a9..f5d79b7a76c65 100644 --- a/modules/ingest-geoip/src/main/java/org/elasticsearch/ingest/geoip/GeoIpCache.java +++ b/modules/ingest-geoip/src/main/java/org/elasticsearch/ingest/geoip/GeoIpCache.java @@ -17,7 +17,7 @@ import org.elasticsearch.ingest.geoip.stats.CacheStats; import java.nio.file.Path; -import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.atomic.LongAdder; import java.util.function.Function; import java.util.function.LongSupplier; @@ -44,8 +44,8 @@ public String toString() { private final LongSupplier relativeNanoTimeProvider; private final Cache cache; - private final AtomicLong hitsTimeInNanos = new AtomicLong(0); - private final AtomicLong missesTimeInNanos = new AtomicLong(0); + private final LongAdder hitsTimeInNanos = new LongAdder(); + private final LongAdder missesTimeInNanos = new LongAdder(); // package private for testing GeoIpCache(long maxSize, LongSupplier relativeNanoTimeProvider) { @@ -80,9 +80,9 @@ RESPONSE putIfAbsent(ProjectId projectId, String ip, String databaseP // store the result or no-result in the cache cache.put(cacheKey, response); long databaseRequestAndCachePutTime = relativeNanoTimeProvider.getAsLong() - retrieveStart; - missesTimeInNanos.addAndGet(cacheRequestTime + databaseRequestAndCachePutTime); + missesTimeInNanos.add(cacheRequestTime + databaseRequestAndCachePutTime); } else { - hitsTimeInNanos.addAndGet(cacheRequestTime); + hitsTimeInNanos.add(cacheRequestTime); } if (response == NO_RESULT) { @@ -126,8 +126,8 @@ public CacheStats getCacheStats() { stats.getHits(), stats.getMisses(), stats.getEvictions(), - TimeValue.nsecToMSec(hitsTimeInNanos.get()), - TimeValue.nsecToMSec(missesTimeInNanos.get()) + TimeValue.nsecToMSec(hitsTimeInNanos.sum()), + TimeValue.nsecToMSec(missesTimeInNanos.sum()) ); } diff --git a/x-pack/plugin/enrich/src/main/java/org/elasticsearch/xpack/enrich/EnrichCache.java b/x-pack/plugin/enrich/src/main/java/org/elasticsearch/xpack/enrich/EnrichCache.java index c5c8f0f9f6d22..882dc67eac53f 100644 --- a/x-pack/plugin/enrich/src/main/java/org/elasticsearch/xpack/enrich/EnrichCache.java +++ b/x-pack/plugin/enrich/src/main/java/org/elasticsearch/xpack/enrich/EnrichCache.java @@ -23,7 +23,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.atomic.LongAdder; import java.util.function.Consumer; import java.util.function.LongSupplier; import java.util.function.ToLongBiFunction; @@ -47,9 +47,9 @@ public final class EnrichCache { private final Cache cache; private final LongSupplier relativeNanoTimeProvider; - private final AtomicLong hitsTimeInNanos = new AtomicLong(0); - private final AtomicLong missesTimeInNanos = new AtomicLong(0); - private final AtomicLong sizeInBytes = new AtomicLong(0); + private final LongAdder hitsTimeInNanos = new LongAdder(); + private final LongAdder missesTimeInNanos = new LongAdder(); + private final LongAdder sizeInBytes = new LongAdder(); EnrichCache(long maxSize) { this(maxSize, System::nanoTime); @@ -72,7 +72,7 @@ public final class EnrichCache { private Cache createCache(long maxWeight, ToLongBiFunction weigher) { var builder = CacheBuilder.builder().setMaximumWeight(maxWeight).removalListener(notification -> { - sizeInBytes.getAndAdd(-1 * notification.getValue().sizeInBytes); + sizeInBytes.add(-1 * notification.getValue().sizeInBytes); }); if (weigher != null) { builder.weigher(weigher); @@ -105,7 +105,7 @@ public void computeIfAbsent( List> response = get(cacheKey); long cacheRequestTime = relativeNanoTimeProvider.getAsLong() - cacheStart; if (response != null) { - hitsTimeInNanos.addAndGet(cacheRequestTime); + hitsTimeInNanos.add(cacheRequestTime); listener.onResponse(response); } else { final long retrieveStart = relativeNanoTimeProvider.getAsLong(); @@ -114,7 +114,7 @@ public void computeIfAbsent( put(cacheKey, cacheValue); List> copy = deepCopy(cacheValue.hits, false); long databaseQueryAndCachePutTime = relativeNanoTimeProvider.getAsLong() - retrieveStart; - missesTimeInNanos.addAndGet(cacheRequestTime + databaseQueryAndCachePutTime); + missesTimeInNanos.add(cacheRequestTime + databaseQueryAndCachePutTime); listener.onResponse(copy); }, listener::onFailure)); } @@ -133,7 +133,7 @@ public void computeIfAbsent( // non-private for unit testing only void put(CacheKey cacheKey, CacheValue cacheValue) { cache.put(cacheKey, cacheValue); - sizeInBytes.addAndGet(cacheValue.sizeInBytes); + sizeInBytes.add(cacheValue.sizeInBytes); } public EnrichStatsAction.Response.CacheStats getStats(String localNodeId) { @@ -144,9 +144,9 @@ public EnrichStatsAction.Response.CacheStats getStats(String localNodeId) { cacheStats.getHits(), cacheStats.getMisses(), cacheStats.getEvictions(), - TimeValue.nsecToMSec(hitsTimeInNanos.get()), - TimeValue.nsecToMSec(missesTimeInNanos.get()), - sizeInBytes.get() + TimeValue.nsecToMSec(hitsTimeInNanos.sum()), + TimeValue.nsecToMSec(missesTimeInNanos.sum()), + sizeInBytes.sum() ); }