Events may optionally declare that they logically follow another event, so that
we can preserve important event orderings in the face of unreliable delivery and
ordering of messages from the queues.This function keeps track of the ID of each event that this shard has
successfully processed going back to the PRECEDING_EVENT_LOOKBACK period. If an
event arrives that must follow another one, confirm that we have recently seen
and processed that event before proceeding.Args:
handler: The function to call when an out-of-order event is
ready to be processed
event: The event to be processed. This object should include
metadata indicating if and what event it follows.
depth: The current recursion depth, used to prevent infinite
recursion due to cyclic dependencies between events. Defaults to 0.
Raises EventArrivedEarly if the current event shouldn’t be processed yet.