Skip to content

Commit f05d210

Browse files
Fix the lack of a sequence expire check
1 parent 2c2508e commit f05d210

2 files changed

Lines changed: 31 additions & 2 deletions

File tree

‎src/main/java/com/abilityapi/sequenceapi/Sequence.java‎

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,8 +233,34 @@ public enum State {
233233
this.safe = safe;
234234
}
235235

236+
public void update(final Sequence sequence) {
237+
if (sequence.observerActions.isEmpty() && sequence.scheduleActions.isEmpty()) {
238+
return;
239+
}
240+
241+
ObserverAction observeAction = (ObserverAction) sequence.observerActions.keySet().toArray()[0];
242+
ScheduleAction scheduleAction = (ScheduleAction) sequence.scheduleActions.keySet().toArray()[0];
243+
244+
Boolean expiredObserver = null;
245+
Boolean expiredSchedule = null;
246+
247+
if (observeAction != null) {
248+
expiredObserver = sequence.getLastExecutionTime() + ((observeAction.getExpire() / 20) * 1000) < System.currentTimeMillis();
249+
}
250+
251+
if (scheduleAction != null) {
252+
expiredSchedule = sequence.getLastExecutionTime() + ((scheduleAction.getExpire() / 20) * 1000) < System.currentTimeMillis();
253+
}
254+
255+
if (isNullable(expiredObserver) && isNullable(expiredSchedule)) sequence.state = State.EXPIRED;
256+
}
257+
236258
public final boolean isSafe() {
237259
return this.safe;
238260
}
261+
262+
private boolean isNullable(final Boolean value) {
263+
return value == null || value;
264+
}
239265
}
240266
}

‎src/main/java/com/abilityapi/sequenceapi/SequenceManager.java‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,8 +225,11 @@ public void clean(final SequenceContext sequenceContext, boolean force) {
225225
checkNotNull(sequenceContext);
226226
SequencePreconditions.checkContextType(sequenceContext, SequenceContext.ID, UUID.class);
227227

228-
this.sequences.get(sequenceContext.getId()).removeIf(sequence ->
229-
force || sequence.getState().equals(Sequence.State.EXPIRED));
228+
this.sequences.get(sequenceContext.getId()).removeIf(sequence -> {
229+
sequence.getState().update(sequence);
230+
231+
return force || sequence.getState().equals(Sequence.State.EXPIRED);
232+
});
230233
}
231234

232235
public boolean _invokeObserver(final T event, final Sequence<T> sequence, final SequenceContext sequenceContext) {

0 commit comments

Comments
 (0)