Skip to content

Commit ef2642a

Browse files
committed
possible refinements
1 parent 7b46752 commit ef2642a

File tree

3 files changed

+19
-42
lines changed

3 files changed

+19
-42
lines changed

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

Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -17,48 +17,36 @@
1717

1818
import java.util.Optional;
1919

20+
import io.javaoperatorsdk.operator.api.reconciler.ReconcileUtils;
2021
import io.javaoperatorsdk.operator.processing.event.source.controller.ResourceEvent;
2122

2223
class EventFilterDetails {
2324

2425
private int activeUpdates = 0;
2526
private ResourceEvent lastEvent;
26-
private int lastUpdatedResourceVersion = -1;
27-
28-
public int getActiveUpdates() {
29-
return activeUpdates;
30-
}
3127

3228
public void increaseActiveUpdates() {
3329
activeUpdates = activeUpdates + 1;
3430
}
3531

36-
public void decreaseActiveUpdates() {
32+
public boolean decreaseActiveUpdates() {
3733
activeUpdates = activeUpdates - 1;
34+
return activeUpdates == 0;
3835
}
3936

4037
public void setLastEvent(ResourceEvent event) {
4138
lastEvent = event;
4239
}
4340

44-
public void setLastUpdatedResourceVersion(String version) {
45-
var parsed = Integer.parseInt(version);
46-
if (parsed > lastUpdatedResourceVersion) {
47-
lastUpdatedResourceVersion = parsed;
48-
}
49-
}
50-
51-
public Optional<ResourceEvent> getLatestEventAfterLastUpdateEvent() {
52-
if (lastEvent == null) return Optional.empty();
53-
if (Integer.parseInt(lastEvent.getResource().orElseThrow().getMetadata().getResourceVersion())
54-
> lastUpdatedResourceVersion) {
41+
public Optional<ResourceEvent> getLatestEventAfterLastUpdateEvent(String updatedResourceVersion) {
42+
if (lastEvent != null
43+
&& (updatedResourceVersion == null
44+
|| ReconcileUtils.validateAndCompareResourceVersions(
45+
lastEvent.getResource().orElseThrow().getMetadata().getResourceVersion(),
46+
updatedResourceVersion)
47+
> 0)) {
5548
return Optional.of(lastEvent);
56-
} else {
57-
return Optional.empty();
5849
}
59-
}
60-
61-
public boolean isFilteringDone() {
62-
return activeUpdates == 0;
50+
return Optional.empty();
6351
}
6452
}

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

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -79,16 +79,10 @@ public synchronized Optional<ResourceEvent> doneEventFilterModify(
7979
return Optional.empty();
8080
}
8181
var ed = activeUpdates.get(resourceID);
82-
ed.decreaseActiveUpdates();
83-
if (updatedResourceVersion != null) {
84-
ed.setLastUpdatedResourceVersion(updatedResourceVersion);
85-
}
86-
if (ed.getActiveUpdates() == 0) {
87-
var latestEventAfterUpdate = ed.getLatestEventAfterLastUpdateEvent();
88-
if (latestEventAfterUpdate.isPresent()) {
89-
activeUpdates.remove(resourceID);
90-
}
91-
return latestEventAfterUpdate;
82+
// TODO: null check
83+
if (ed.decreaseActiveUpdates()) {
84+
activeUpdates.remove(resourceID);
85+
return ed.getLatestEventAfterLastUpdateEvent(updatedResourceVersion);
9286
} else {
9387
return Optional.empty();
9488
}
@@ -125,7 +119,7 @@ private synchronized boolean onEvent(T resource, boolean unknownState, boolean d
125119
int comp = 0;
126120
if (cached != null) {
127121
comp = ReconcileUtils.validateAndCompareResourceVersions(resource, cached);
128-
if (comp >= 0 || unknownState) {
122+
if (comp > 0 || unknownState) {
129123
cache.remove(resourceId);
130124
// we propagate event only for our update or newer other can be discarded since we know we
131125
// will receive
@@ -142,12 +136,7 @@ private synchronized boolean onEvent(T resource, boolean unknownState, boolean d
142136
? new ResourceDeleteEvent(ResourceAction.DELETED, resourceId, resource, unknownState)
143137
: new ResourceEvent(
144138
ResourceAction.UPDATED, resourceId, resource)); // todo true action
145-
if (ed.isFilteringDone() && ed.getLatestEventAfterLastUpdateEvent().isPresent()) {
146-
activeUpdates.remove(resourceId);
147-
return false;
148-
} else {
149-
return true;
150-
}
139+
return true;
151140
} else {
152141
return filterEvent;
153142
}

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/informer/TemporaryPrimaryResourceCacheTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,9 +151,9 @@ void putBeforeEvent() {
151151
nextResource.getMetadata().setResourceVersion("3");
152152
temporaryResourceCache.putResource(nextResource);
153153

154-
// the result is false since the put was not part of event filtering update
154+
// now expect an event with the matching resourceVersion to be known after the put
155155
result = temporaryResourceCache.onAddOrUpdateEvent(nextResource);
156-
assertThat(result).isFalse();
156+
assertThat(result).isTrue();
157157
}
158158

159159
@Test

0 commit comments

Comments
 (0)