package net.lenards.kinesis; import java.io.Serializable; import org.apache.spark.streaming.Duration; import org.apache.spark.streaming.util.Clock; import org.apache.spark.streaming.util.ManualClock; import org.apache.spark.streaming.util.SystemClock; public class KinesisCheckpointState implements Serializable { private Duration checkpointInterval; private ManualClock checkpointClock; public KinesisCheckpointState(Duration interval) { this(interval, new SystemClock()); } public KinesisCheckpointState(Duration interval, Clock current) { this.checkpointInterval = interval; this.checkpointClock = new ManualClock(); checkpointClock.setTime(current.currentTime() + checkpointInterval.milliseconds()); } public boolean shouldCheckpoint() { return (new SystemClock()).currentTime() > this.checkpointClock.currentTime(); } public void advanceCheckpoint() { this.checkpointClock.addToTime(checkpointInterval.milliseconds()); } }