Skip to content

Commit 85d1447

Browse files
committed
changed scheduling algorithm
1 parent bc1a733 commit 85d1447

File tree

3 files changed

+7
-64
lines changed

3 files changed

+7
-64
lines changed

operator-framework/src/main/java/com/github/containersolutions/operator/processing/CustomResourceEvent.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,7 @@ public String resourceUid() {
3232
return resource.getMetadata().getUid();
3333
}
3434

35-
public Boolean sameResourceAs(CustomResourceEvent otherEvent) {
36-
return getResource().getMetadata().getUid().equals(otherEvent.getResource().getMetadata().getUid());
37-
}
38-
39-
public Boolean isSameResourceAndNewerVersion(CustomResourceEvent otherEvent) {
40-
return sameResourceAs(otherEvent) &&
41-
Long.parseLong(getResource().getMetadata().getResourceVersion()) >
42-
Long.parseLong(otherEvent.getResource().getMetadata().getResourceVersion());
4335

44-
}
4536

4637
public Optional<Long> nextBackOff() {
4738
retryCount++;

operator-framework/src/main/java/com/github/containersolutions/operator/processing/EventScheduler.java

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -83,24 +83,12 @@ void scheduleEvent(CustomResourceEvent event) {
8383
log.debug("Skipping delete event since deletion timestamp is present on resource, so finalizer was in place.");
8484
return;
8585
}
86-
if (eventStore.receivedMoreRecentEventBefore(event)) {
87-
log.debug("Skipping event processing since was processed event with newer version before. {}", event);
88-
return;
89-
}
90-
eventStore.updateLatestResourceVersionReceived(event);
91-
92-
if (eventStore.containsOlderVersionOfNotScheduledEvent(event)) {
93-
log.debug("Replacing event which is not scheduled yet, since incoming event is more recent. new Event:{}", event);
94-
eventStore.addOrReplaceEventAsNotScheduledYet(event);
95-
return;
96-
}
97-
if (eventStore.containsOlderVersionOfEventUnderProcessing(event)) {
86+
if (eventStore.containsNotScheduledEvent(event.resourceUid())) {
9887
log.debug("Scheduling event for later processing since there is an event under processing for same kind." +
9988
" New event: {}", event);
10089
eventStore.addOrReplaceEventAsNotScheduledYet(event);
10190
return;
10291
}
103-
10492
Optional<Long> nextBackOff = event.nextBackOff();
10593
if (!nextBackOff.isPresent()) {
10694
log.warn("Event max retry limit reached. Will be discarded. {}", event);
@@ -120,9 +108,8 @@ void eventProcessingFinishedSuccessfully(CustomResourceEvent event) {
120108
try {
121109
lock.lock();
122110
eventStore.removeEventUnderProcessing(event.resourceUid());
123-
CustomResourceEvent notScheduledYetEvent = eventStore.removeEventNotScheduledYet(event.resourceUid());
124-
if (notScheduledYetEvent != null) {
125-
scheduleEvent(notScheduledYetEvent);
111+
if (eventStore.containsNotScheduledEvent(event.resourceUid())) {
112+
scheduleEvent(eventStore.removeEventNotScheduledYet(event.resourceUid()));
126113
}
127114
} finally {
128115
lock.unlock();
@@ -133,14 +120,8 @@ void eventProcessingFailed(CustomResourceEvent event) {
133120
try {
134121
lock.lock();
135122
eventStore.removeEventUnderProcessing(event.resourceUid());
136-
CustomResourceEvent notScheduledYetEvent = eventStore.removeEventNotScheduledYet(event.resourceUid());
137-
if (notScheduledYetEvent != null) {
138-
if (!notScheduledYetEvent.isSameResourceAndNewerVersion(event)) {
139-
log.warn("The not yet scheduled event has older version then actual event. This is probably a bug.");
140-
}
141-
// this is the case when we failed processing an event but we already received a new one.
142-
// Since since we process declarative resources it correct to schedule the new event.
143-
scheduleEvent(notScheduledYetEvent);
123+
if (eventStore.containsNotScheduledEvent(event.resourceUid())) {
124+
scheduleEvent(eventStore.removeEventNotScheduledYet(event.resourceUid()));
144125
} else {
145126
scheduleEvent(event);
146127
}

operator-framework/src/main/java/com/github/containersolutions/operator/processing/EventStore.java

Lines changed: 2 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,11 @@ public class EventStore {
1010

1111
private final static Logger log = LoggerFactory.getLogger(EventStore.class);
1212

13-
private final Map<String, Long> lastResourceVersion = new HashMap<>();
1413
private final Map<String, CustomResourceEvent> eventsNotScheduledYet = new HashMap<>();
1514
private final Map<String, CustomResourceEvent> eventsUnderProcessing = new HashMap<>();
1615

17-
public boolean containsOlderVersionOfNotScheduledEvent(CustomResourceEvent newEvent) {
18-
return eventsNotScheduledYet.containsKey(newEvent.resourceUid()) &&
19-
newEvent.isSameResourceAndNewerVersion(eventsNotScheduledYet.get(newEvent.resourceUid()));
16+
public boolean containsNotScheduledEvent(String uuid) {
17+
return eventsNotScheduledYet.containsKey(uuid);
2018
}
2119

2220
public CustomResourceEvent removeEventNotScheduledYet(String uid) {
@@ -27,38 +25,11 @@ public void addOrReplaceEventAsNotScheduledYet(CustomResourceEvent event) {
2725
eventsNotScheduledYet.put(event.resourceUid(), event);
2826
}
2927

30-
public boolean containsOlderVersionOfEventUnderProcessing(CustomResourceEvent newEvent) {
31-
return eventsUnderProcessing.containsKey(newEvent.resourceUid()) &&
32-
newEvent.isSameResourceAndNewerVersion(eventsUnderProcessing.get(newEvent.resourceUid()));
33-
}
34-
35-
3628
public void addEventUnderProcessing(CustomResourceEvent event) {
3729
eventsUnderProcessing.put(event.resourceUid(), event);
3830
}
39-
4031
public CustomResourceEvent removeEventUnderProcessing(String uid) {
4132
return eventsUnderProcessing.remove(uid);
4233
}
4334

44-
public void updateLatestResourceVersionReceived(CustomResourceEvent event) {
45-
Long current = lastResourceVersion.get(event.resourceUid());
46-
long received = Long.parseLong(event.getResource().getMetadata().getResourceVersion());
47-
if (current == null || received > current) {
48-
lastResourceVersion.put(event.resourceUid(), received);
49-
log.debug("Resource version for {} updated from {} to {}", event.getResource().getMetadata().getName(), current, received);
50-
} else {
51-
log.debug("Resource version for {} not updated from {}", event.getResource().getMetadata().getName(), current);
52-
}
53-
}
54-
55-
public boolean receivedMoreRecentEventBefore(CustomResourceEvent customResourceEvent) {
56-
Long lastVersionProcessed = lastResourceVersion.get(customResourceEvent.resourceUid());
57-
if (lastVersionProcessed == null) {
58-
return false;
59-
} else {
60-
return lastVersionProcessed > Long.parseLong(customResourceEvent.getResource()
61-
.getMetadata().getResourceVersion());
62-
}
63-
}
6435
}

0 commit comments

Comments
 (0)