Skip to content

Commit 8f80ac3

Browse files
committed
fix: keep track of non existing resource
1 parent ba03d9e commit 8f80ac3

File tree

2 files changed

+18
-10
lines changed

2 files changed

+18
-10
lines changed

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

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
public abstract class CachingEventSource<T, P extends HasMetadata>
2727
extends AbstractResourceEventSource<P, T> implements Cache<T> {
2828

29-
protected UpdatableCache<T> cache;
29+
protected UpdatableCache<Optional<T>> cache;
3030

3131
public CachingEventSource(Class<T> resourceClass) {
3232
super(resourceClass);
@@ -35,7 +35,7 @@ public CachingEventSource(Class<T> resourceClass) {
3535

3636
@Override
3737
public Optional<T> get(ResourceID resourceID) {
38-
return cache.get(resourceID);
38+
return cache.get(resourceID).orElse(Optional.empty());
3939
}
4040

4141
@Override
@@ -50,17 +50,24 @@ public Stream<ResourceID> keys() {
5050

5151
@Override
5252
public Stream<T> list(Predicate<T> predicate) {
53-
return cache.list(predicate);
53+
return cache.list(c -> c.isPresent() && predicate.test(c.get())).map(c -> c.get());
5454
}
5555

5656
protected void handleDelete(ResourceID relatedResourceID) {
5757
if (!isRunning()) {
5858
return;
5959
}
60+
61+
6062
var cachedValue = cache.get(relatedResourceID);
61-
cache.remove(relatedResourceID);
63+
cache.put(relatedResourceID, Optional.empty());
6264
// we only propagate event if the resource was previously in cache
65+
6366
if (cachedValue.isPresent()) {
67+
if (cachedValue.get().isPresent()) {
68+
getEventHandler().handleEvent(new Event(relatedResourceID));
69+
}
70+
} else {
6471
getEventHandler().handleEvent(new Event(relatedResourceID));
6572
}
6673
}
@@ -69,19 +76,19 @@ protected void handleEvent(T value, ResourceID relatedResourceID) {
6976
if (!isRunning()) {
7077
return;
7178
}
72-
var cachedValue = cache.get(relatedResourceID);
79+
var cachedValue = cache.get(relatedResourceID).orElse(Optional.empty());
7380
if (cachedValue.map(v -> !v.equals(value)).orElse(true)) {
74-
cache.put(relatedResourceID, value);
81+
cache.put(relatedResourceID, Optional.of(value));
7582
getEventHandler().handleEvent(new Event(relatedResourceID));
7683
}
7784
}
7885

79-
protected UpdatableCache<T> initCache() {
86+
protected UpdatableCache<Optional<T>> initCache() {
8087
return new MapCache<>();
8188
}
8289

8390
public Optional<T> getCachedValue(ResourceID resourceID) {
84-
return cache.get(resourceID);
91+
return cache.get(resourceID).orElse(Optional.empty());
8592
}
8693

8794
@Override
@@ -91,7 +98,7 @@ public void stop() throws OperatorException {
9198

9299
@Override
93100
public Optional<T> getAssociated(P primary) {
94-
return cache.get(ResourceID.fromResource(primary));
101+
return cache.get(ResourceID.fromResource(primary)).orElse(Optional.empty());
95102
}
96103

97104
protected static class MapCache<T> implements UpdatableCache<T> {

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,10 @@ private Optional<T> getAndCacheResource(ResourceID resourceID) {
7070
var resource = resourceCache.get(resourceID);
7171
if (resource.isPresent()) {
7272
var value = resourceSupplier.getResource(resource.get());
73-
value.ifPresent(v -> cache.put(resourceID, v));
73+
cache.put(resourceID, value);
7474
return value;
7575
}
76+
7677
return Optional.empty();
7778
}
7879

0 commit comments

Comments
 (0)