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.

Classifies an expired shared interval, giving retained controls terminal precedence.

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.

Drops retained output and invalidates retry correlation after terminal transport failure.

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.

Reserves the next recovery generation and revokes frames from the superseded generation.

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

Returns whether a retry timer is already correlated.

Drops retained frames while preserving controls and the shared unwritable interval.

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
}

timeout_disposition()

@type timeout_disposition() ::
  :continue
  | {:recover_frame, MingaEditor.Frontend.Manager.PendingFrame.t()}
  | :transport_failure

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.

classify_timeout(pressure, now, failure_ms)

@spec classify_timeout(t(), integer(), non_neg_integer()) :: timeout_disposition()

Classifies an expired shared interval, giving retained controls terminal precedence.

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.

fail_transport(pressure)

@spec fail_transport(t()) :: t()

Drops retained output and invalidates retry correlation after terminal transport failure.

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.

reserve_recovery_generation(pressure)

@spec reserve_recovery_generation(t()) :: {pos_integer(), t()}

Reserves the next recovery generation and revokes frames from the superseded 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.

revoke_frames(pressure)

@spec revoke_frames(t()) :: t()

Drops retained frames while preserving controls and the shared unwritable interval.

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.