Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions docs/changelog/132922.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
pr: 132922
summary: '`GeoIpCache` and `EnrichCache` improvements'
area: Authorization
type: enhancement
issues: []
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -44,8 +44,8 @@ public String toString() {

private final LongSupplier relativeNanoTimeProvider;
private final Cache<CacheKey, Object> 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) {
Expand Down Expand Up @@ -80,9 +80,9 @@ <RESPONSE> 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) {
Expand Down Expand Up @@ -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())
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -47,9 +47,9 @@ public final class EnrichCache {

private final Cache<CacheKey, CacheValue> 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);
Expand All @@ -72,7 +72,7 @@ public final class EnrichCache {

private Cache<CacheKey, CacheValue> createCache(long maxWeight, ToLongBiFunction<CacheKey, CacheValue> weigher) {
var builder = CacheBuilder.<CacheKey, CacheValue>builder().setMaximumWeight(maxWeight).removalListener(notification -> {
sizeInBytes.getAndAdd(-1 * notification.getValue().sizeInBytes);
sizeInBytes.add(-1 * notification.getValue().sizeInBytes);
});
if (weigher != null) {
builder.weigher(weigher);
Expand Down Expand Up @@ -105,7 +105,7 @@ public void computeIfAbsent(
List<Map<?, ?>> 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();
Expand All @@ -114,7 +114,7 @@ public void computeIfAbsent(
put(cacheKey, cacheValue);
List<Map<?, ?>> copy = deepCopy(cacheValue.hits, false);
long databaseQueryAndCachePutTime = relativeNanoTimeProvider.getAsLong() - retrieveStart;
missesTimeInNanos.addAndGet(cacheRequestTime + databaseQueryAndCachePutTime);
missesTimeInNanos.add(cacheRequestTime + databaseQueryAndCachePutTime);
listener.onResponse(copy);
}, listener::onFailure));
}
Expand All @@ -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) {
Expand All @@ -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()
);
}

Expand Down