Skip to content

Commit fb509f5

Browse files
committed
wip
Signed-off-by: Attila Mészáros <a_meszaros@apple.com>
1 parent 059fdf2 commit fb509f5

5 files changed

Lines changed: 59 additions & 1 deletion

File tree

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerManager.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,6 @@ private InformerWrapper<R> createEventSource(
149149
ResourceEventHandler<R> eventHandler,
150150
String namespaceIdentifier) {
151151
final var informerConfig = configuration.getInformerConfig();
152-
153152
if (informerConfig.getFieldSelector() != null
154153
&& !informerConfig.getFieldSelector().getFields().isEmpty()) {
155154
for (var f : informerConfig.getFieldSelector().getFields()) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package io.javaoperatorsdk.operator.processing.event.source.pool;
2+
3+
public abstract class AbstractEventSourcePool<C, T> implements EventSourcePool<C, T> {}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package io.javaoperatorsdk.operator.processing.event.source.pool;
2+
3+
public interface EventSourcePool<C, T> {
4+
5+
T getEventSource(C classifier);
6+
7+
void removeEventSource(T informerEventSource);
8+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package io.javaoperatorsdk.operator.processing.event.source.pool;
2+
3+
import io.fabric8.kubernetes.api.model.HasMetadata;
4+
import io.javaoperatorsdk.operator.api.config.informer.FieldSelector;
5+
6+
public record InformerClassifier(
7+
String labelSelector,
8+
String namespaceIdentifier,
9+
Class<? extends HasMetadata> resourceClass,
10+
FieldSelector fieldSelector) {}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package io.javaoperatorsdk.operator.processing.event.source.pool;
2+
3+
import java.util.Map;
4+
import java.util.concurrent.ConcurrentHashMap;
5+
import java.util.concurrent.atomic.AtomicInteger;
6+
7+
import io.fabric8.kubernetes.client.KubernetesClient;
8+
import io.fabric8.kubernetes.client.informers.SharedIndexInformer;
9+
10+
public class InformerPool
11+
extends AbstractEventSourcePool<InformerClassifier, SharedIndexInformer<?>> {
12+
13+
private final KubernetesClient client;
14+
15+
private Map<InformerClassifier, SharedIndexInformer<?>> informers = new ConcurrentHashMap<>();
16+
private Map<SharedIndexInformer<?>, AtomicInteger> counters = new ConcurrentHashMap<>();
17+
18+
public InformerPool(KubernetesClient client) {
19+
this.client = client;
20+
}
21+
22+
@Override
23+
public SharedIndexInformer<?> getEventSource(InformerClassifier classifier) {
24+
var actual = informers.get(classifier);
25+
if (actual == null) {
26+
actual = null; // create Informer
27+
}
28+
incrementCounter(actual);
29+
return null;
30+
}
31+
32+
private synchronized void incrementCounter(SharedIndexInformer<?> actual) {
33+
counters.compute(actual, (k, v) -> new AtomicInteger(v == null ? 0 : v.incrementAndGet()));
34+
}
35+
36+
@Override
37+
public void removeEventSource(SharedIndexInformer<?> informerEventSource) {}
38+
}

0 commit comments

Comments
 (0)