Skip to content

Commit 13ce5ef

Browse files
committed
feat: monitor cache size
1 parent 6994604 commit 13ce5ef

File tree

3 files changed

+26
-19
lines changed

3 files changed

+26
-19
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/Metrics.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.javaoperatorsdk.operator;
22

3+
import java.util.Collections;
4+
import java.util.Map;
35
import java.util.concurrent.TimeUnit;
46
import java.util.function.ToDoubleFunction;
57
import java.util.function.ToLongFunction;
@@ -26,6 +28,7 @@
2628

2729
public class Metrics {
2830
public static final Metrics NOOP = new Metrics(new NoopMeterRegistry(Clock.SYSTEM));
31+
public static final String PREFIX = "operator.sdk.";
2932
private final MeterRegistry registry;
3033

3134
public Metrics(MeterRegistry registry) {
@@ -44,7 +47,7 @@ public interface ControllerExecution<T> {
4447

4548
public <T> T timeControllerExecution(ControllerExecution<T> execution) {
4649
final var name = execution.controllerName();
47-
final var execName = "operator.sdk.controllers.execution." + execution.name();
50+
final var execName = PREFIX + "controllers.execution." + execution.name();
4851
final var timer =
4952
Timer.builder(execName)
5053
.tags("controller", name)
@@ -68,25 +71,27 @@ public <T> T timeControllerExecution(ControllerExecution<T> execution) {
6871
}
6972

7073
public void incrementControllerRetriesNumber() {
71-
7274
registry
7375
.counter(
74-
"operator.sdk.retry.on.exception", "retry", "retryCounter", "type",
76+
PREFIX + "retry.on.exception", "retry", "retryCounter", "type",
7577
"retryException")
7678
.increment();
7779

7880
}
7981

8082
public void incrementProcessedEventsNumber() {
81-
8283
registry
8384
.counter(
84-
"operator.sdk.total.events.received", "events", "totalEvents", "type",
85+
PREFIX + "total.events.received", "events", "totalEvents", "type",
8586
"eventsReceived")
8687
.increment();
8788

8889
}
8990

91+
public <T extends Map<?, ?>> T monitorSizeOf(T map, String name) {
92+
return registry.gaugeMapSize(PREFIX + name + ".size", Collections.emptyList(), map);
93+
}
94+
9095
public static class NoopMeterRegistry extends MeterRegistry {
9196
public NoopMeterRegistry(Clock clock) {
9297
super(clock);

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/CustomResourceCache.java

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import org.slf4j.LoggerFactory;
1515

1616
import io.fabric8.kubernetes.client.CustomResource;
17+
import io.javaoperatorsdk.operator.Metrics;
1718

1819
import com.fasterxml.jackson.core.JsonProcessingException;
1920
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -25,34 +26,34 @@
2526
public class CustomResourceCache {
2627

2728
private static final Logger log = LoggerFactory.getLogger(CustomResourceCache.class);
29+
private static final Predicate passthrough = o -> true;
2830

2931
private final ObjectMapper objectMapper;
30-
private final ConcurrentMap<String, CustomResource> resources = new ConcurrentHashMap<>();
32+
private final ConcurrentMap<String, CustomResource> resources;
3133
private final Lock lock = new ReentrantLock();
3234

3335
public CustomResourceCache() {
34-
this(new ObjectMapper());
36+
this(new ObjectMapper(), Metrics.NOOP);
3537
}
3638

37-
public CustomResourceCache(ObjectMapper objectMapper) {
39+
public CustomResourceCache(ObjectMapper objectMapper, Metrics metrics) {
3840
this.objectMapper = objectMapper;
41+
resources = metrics.monitorSizeOf(new ConcurrentHashMap<>(), "cache");
3942
}
4043

4144
public void cacheResource(CustomResource resource) {
42-
try {
43-
lock.lock();
44-
resources.put(KubernetesResourceUtils.getUID(resource), resource);
45-
} finally {
46-
lock.unlock();
47-
}
45+
cacheResource(resource, passthrough);
4846
}
4947

5048
public void cacheResource(CustomResource resource, Predicate<CustomResource> predicate) {
5149
try {
5250
lock.lock();
53-
if (predicate.test(resources.get(KubernetesResourceUtils.getUID(resource)))) {
54-
log.trace("Update cache after condition is true: {}", getName(resource));
55-
resources.put(getUID(resource), resource);
51+
final var uid = getUID(resource);
52+
if (predicate.test(resources.get(uid))) {
53+
if (passthrough != predicate) {
54+
log.trace("Update cache after condition is true: {}", getName(resource));
55+
}
56+
resources.put(uid, resource);
5657
}
5758
} finally {
5859
lock.unlock();

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/internal/CustomResourceEventSource.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,9 @@ public class CustomResourceEventSource<T extends CustomResource<?, ?>> extends A
3939
public CustomResourceEventSource(ConfiguredController<T> controller) {
4040
this.controller = controller;
4141
this.watches = new LinkedList<>();
42-
this.customResourceCache = new CustomResourceCache(
43-
controller.getConfiguration().getConfigurationService().getObjectMapper());
42+
final var configurationService = controller.getConfiguration().getConfigurationService();
43+
this.customResourceCache = new CustomResourceCache(configurationService.getObjectMapper(),
44+
configurationService.getMetrics());
4445
}
4546

4647
@Override

0 commit comments

Comments
 (0)