MingaEditor.Frontend.Manager.OutputPressure (Minga v0.1.0)

Copy Markdown View Source

Bounded frontend output retention and acknowledgement correlation state.

Summary

Functions

Accepts a correlated acknowledgement or rejects stale generation and sequence values.

Advances after the current frame is admitted and returns the admitted frame.

Consumes the matching retry token and rejects stale timer messages.

Drops one admitted control batch.

Returns whether any control batch is retained.

Retains a first unwritable frame or replaces the single coalesced successor.

Returns whether the current unwritable interval reached its failure budget.

Marks the current admission unwritable and correlates one retry token.

Returns empty pressure state.

Returns the next retained control batch in deterministic resource-key order.

Drops retained output and requires acknowledgements from the next generation.

Coalesces the latest unwritable out-of-band control batch by resource key.

Returns whether a retry timer is already correlated.

Clears the unwritable interval after every retained batch drains.

Returns bounded retained-byte and acknowledgement diagnostics.

Types

control_key()

@type control_key() :: non_neg_integer() | {non_neg_integer(), non_neg_integer()}

stats()

@type stats() :: %{
  current_frame_seq: non_neg_integer() | nil,
  replacement_frame_seq: non_neg_integer() | nil,
  current_bytes: non_neg_integer(),
  replacement_bytes: non_neg_integer(),
  retained_bytes: non_neg_integer(),
  control_batches: non_neg_integer(),
  control_bytes: non_neg_integer(),
  total_retained_bytes: non_neg_integer(),
  minimum_ack_generation: non_neg_integer(),
  last_admitted_generation: non_neg_integer(),
  last_admitted_frame_seq: non_neg_integer(),
  last_applied_generation: non_neg_integer(),
  last_applied_frame_seq: non_neg_integer()
}

t()

@type t() :: %MingaEditor.Frontend.Manager.OutputPressure{
  controls: %{required(control_key()) => binary()},
  current: MingaEditor.Frontend.Manager.PendingFrame.t() | nil,
  last_admitted_frame_seq: non_neg_integer(),
  last_admitted_generation: non_neg_integer(),
  last_applied_frame_seq: non_neg_integer(),
  last_applied_generation: non_neg_integer(),
  minimum_ack_generation: non_neg_integer(),
  replacement: MingaEditor.Frontend.Manager.PendingFrame.t() | nil,
  retry_token: reference() | nil,
  unwritable_since: integer() | nil
}

Functions

acknowledge(pressure, generation, frame_seq)

@spec acknowledge(t(), non_neg_integer(), non_neg_integer()) ::
  {:accepted, t()} | :stale

Accepts a correlated acknowledgement or rejects stale generation and sequence values.

admitted(pressure)

@spec admitted(t()) :: {MingaEditor.Frontend.Manager.PendingFrame.t(), t()}

Advances after the current frame is admitted and returns the admitted frame.

consume_retry(pressure, token)

@spec consume_retry(t(), reference()) :: {:ok, t()} | :stale

Consumes the matching retry token and rejects stale timer messages.

control_admitted(pressure, key)

@spec control_admitted(t(), control_key()) :: t()

Drops one admitted control batch.

controls_pending?(output_pressure)

@spec controls_pending?(t()) :: boolean()

Returns whether any control batch is retained.

enqueue(pressure, frame)

@spec enqueue(t(), MingaEditor.Frontend.Manager.PendingFrame.t()) ::
  {:attempt, t()} | {:coalesced, t()}

Retains a first unwritable frame or replaces the single coalesced successor.

expired?(output_pressure, now, failure_ms)

@spec expired?(t(), integer(), non_neg_integer()) :: boolean()

Returns whether the current unwritable interval reached its failure budget.

mark_unwritable(pressure, now, retry_token)

@spec mark_unwritable(t(), integer(), reference()) :: t()

Marks the current admission unwritable and correlates one retry token.

new()

@spec new() :: t()

Returns empty pressure state.

next_control(output_pressure)

@spec next_control(t()) :: {control_key(), binary()} | nil

Returns the next retained control batch in deterministic resource-key order.

require_recovery(pressure, failed)

@spec require_recovery(t(), MingaEditor.Frontend.Manager.PendingFrame.t()) :: t()

Drops retained output and requires acknowledgements from the next generation.

retain_control(pressure, key, batch)

@spec retain_control(t(), control_key(), binary()) :: t()

Coalesces the latest unwritable out-of-band control batch by resource key.

retry_scheduled?(output_pressure)

@spec retry_scheduled?(t()) :: boolean()

Returns whether a retry timer is already correlated.

settled(pressure)

@spec settled(t()) :: t()

Clears the unwritable interval after every retained batch drains.

stats(pressure)

@spec stats(t()) :: stats()

Returns bounded retained-byte and acknowledgement diagnostics.