brazier/presence/delta_generation

Delta generations, ported from Phoenix.Tracker.DeltaGeneration.

A shard keeps a few accumulated deltas of growing size (by default up to 100, 1000 and 10000 tags). Every broadcast or received delta is merged into each generation that it continues and that stays within its size; a generation that would grow too big is restarted from the latest delta alone. A peer that falls behind gets the smallest generation that covers its gap, and a snapshot when none does.

Values

pub fn extract(
  current: state.State(r, m),
  generations: List(state.Delta(r, m)),
  remote_ref: r,
  remote_context: dict.Dict(r, Int),
) -> state.Transfer(r, m)

What to send a peer with remote_context: the first generation that starts at or before its clock and ends after it, else a snapshot.

pub fn push(
  current: state.State(r, m),
  generations: List(state.Delta(r, m)),
  delta: state.Delta(r, m),
  max_sizes: List(Int),
) -> List(state.Delta(r, m))

Add delta to every generation. With no generations yet, each starts from the state’s current (empty) delta.

pub fn remove_down_replicas(
  generations: List(state.Delta(r, m)),
  replica: r,
) -> List(state.Delta(r, m))

Drop a permanently down replica from every generation.

✨ Search Document