@@ -11,6 +11,8 @@ public class EventStore {
11
11
12
12
private final static Logger log = LoggerFactory .getLogger (EventScheduler .class );
13
13
14
+ private final Map <String , Long > lastResourceVersion = new HashMap <>();
15
+
14
16
private final Map <String , CustomResourceEvent > eventsNotScheduledYet = new HashMap <>();
15
17
private final Map <String , ResourceScheduleHolder > eventsScheduledForProcessing = new HashMap <>();
16
18
private final Map <String , CustomResourceEvent > eventsUnderProcessing = new HashMap <>();
@@ -24,8 +26,9 @@ public CustomResourceEvent removeEventNotScheduledYet(String uid) {
24
26
return eventsNotScheduledYet .remove (uid );
25
27
}
26
28
27
- public void addOrReplaceEventAsNotScheduledYet (CustomResourceEvent newEvent ) {
28
- eventsNotScheduledYet .put (newEvent .resourceUid (), newEvent );
29
+ public void addOrReplaceEventAsNotScheduledYet (CustomResourceEvent event ) {
30
+ eventsNotScheduledYet .put (event .resourceUid (), event );
31
+ updateLatestResourceVersionProcessed (event );
29
32
}
30
33
31
34
public boolean containsOlderVersionOfEventUnderProcessing (CustomResourceEvent newEvent ) {
@@ -37,6 +40,11 @@ public boolean containsEventScheduledForProcessing(String uid) {
37
40
return eventsScheduledForProcessing .containsKey (uid );
38
41
}
39
42
43
+ public void addEventUnderProcessing (CustomResourceEvent event ) {
44
+ eventsUnderProcessing .put (event .resourceUid (), event );
45
+ updateLatestResourceVersionProcessed (event );
46
+ }
47
+
40
48
public ResourceScheduleHolder getEventScheduledForProcessing (String uid ) {
41
49
return eventsScheduledForProcessing .get (uid );
42
50
}
@@ -47,16 +55,31 @@ public ResourceScheduleHolder removeEventScheduledForProcessing(String uid) {
47
55
48
56
public void addEventScheduledForProcessing (ResourceScheduleHolder resourceScheduleHolder ) {
49
57
eventsScheduledForProcessing .put (resourceScheduleHolder .getCustomResourceEvent ().resourceUid (), resourceScheduleHolder );
50
- }
51
-
52
- public void addEventUnderProcessing (CustomResourceEvent event ) {
53
- eventsUnderProcessing .put (event .resourceUid (), event );
58
+ updateLatestResourceVersionProcessed (resourceScheduleHolder .getCustomResourceEvent ());
54
59
}
55
60
56
61
public CustomResourceEvent removeEventUnderProcessing (String uid ) {
57
62
return eventsUnderProcessing .remove (uid );
58
63
}
59
64
65
+ private void updateLatestResourceVersionProcessed (CustomResourceEvent event ) {
66
+ Long current = lastResourceVersion .get (event .resourceUid ());
67
+ long received = Long .parseLong (event .getResource ().getMetadata ().getResourceVersion ());
68
+ if (current == null || received > current ) {
69
+ lastResourceVersion .put (event .resourceUid (), received );
70
+ }
71
+ }
72
+
73
+ public boolean processedNewerVersionBefore (CustomResourceEvent customResourceEvent ) {
74
+ Long lastVersionProcessed = lastResourceVersion .get (customResourceEvent .resourceUid ());
75
+ if (lastVersionProcessed == null ) {
76
+ return false ;
77
+ } else {
78
+ return lastVersionProcessed > Long .parseLong (customResourceEvent .getResource ()
79
+ .getMetadata ().getResourceVersion ());
80
+ }
81
+ }
82
+
60
83
public static class ResourceScheduleHolder {
61
84
private CustomResourceEvent customResourceEvent ;
62
85
private ScheduledFuture <?> scheduledFuture ;
0 commit comments