@Override public InternalTimer<K, N> copy(InternalTimer<K, N> from) { return new InternalTimer<>(from.timestamp, from.key, from.namespace); }
@Override public void deleteProcessingTimeTimer(N namespace, long time) { InternalTimer<K, N> timer = new InternalTimer<>(time, (K) keyContext.getCurrentKey(), namespace); Set<InternalTimer<K, N>> timerSet = getProcessingTimeTimerSetForTimer(timer); if (timerSet.remove(timer)) { processingTimeTimersQueue.remove(timer); } }
@Override public void deleteEventTimeTimer(N namespace, long time) { InternalTimer<K, N> timer = new InternalTimer<>(time, (K) keyContext.getCurrentKey(), namespace); Set<InternalTimer<K, N>> timerSet = getEventTimeTimerSetForTimer(timer); if (timerSet.remove(timer)) { eventTimeTimersQueue.remove(timer); } }
@Override public void registerEventTimeTimer(N namespace, long time) { InternalTimer<K, N> timer = new InternalTimer<>(time, (K) keyContext.getCurrentKey(), namespace); Set<InternalTimer<K, N>> timerSet = getEventTimeTimerSetForTimer(timer); if (timerSet.add(timer)) { eventTimeTimersQueue.add(timer); } }
@Override public void registerProcessingTimeTimer(N namespace, long time) { InternalTimer<K, N> timer = new InternalTimer<>(time, (K) keyContext.getCurrentKey(), namespace); // make sure we only put one timer per key into the queue Set<InternalTimer<K, N>> timerSet = getProcessingTimeTimerSetForTimer(timer); if (timerSet.add(timer)) { InternalTimer<K, N> oldHead = processingTimeTimersQueue.peek(); long nextTriggerTime = oldHead != null ? oldHead.getTimestamp() : Long.MAX_VALUE; processingTimeTimersQueue.add(timer); // check if we need to re-schedule our timer to earlier if (time < nextTriggerTime) { if (nextTimer != null) { nextTimer.cancel(false); } nextTimer = processingTimeService.registerTimer(time, this); } } }
@Override public InternalTimer<K, N> deserialize(DataInputView source) throws IOException { K key = keySerializer.deserialize(source); N namespace = namespaceSerializer.deserialize(source); Long timestamp = LongSerializer.INSTANCE.deserialize(source); return new InternalTimer<>(timestamp, key, namespace); }