Owned state for sequence-fenced synchronous parser requests.
Request handlers perform replies and Port writes; this module alone constructs
and updates the request aggregate installed by Minga.Parser.Manager.
Summary
Functions
Adds a deferred request and its buffer fence.
Removes a fence by token.
Allocates an ID and records an emitted request.
Constructs empty parser request state.
Returns the ID that will be allocated to the next emitted request.
Removes a deferred request by token.
Removes an in-flight request by parser request ID.
Removes the in-flight request associated with a fence token.
Consumes a matching fence and records the snapshot sequence.
Removes every deferred, fenced, and in-flight request.
Removes every deferred, fenced, and in-flight request for one buffer.
Splits ready deferred requests for one synchronized buffer.
Types
@type command_builder() :: (pos_integer(), non_neg_integer() -> binary())
@type deferred_request() :: %{ from: GenServer.from(), buffer: pid(), command_builder: command_builder(), required_sequence: non_neg_integer() | nil }
@type in_flight_request() :: %{ from: GenServer.from(), buffer: pid(), token: reference() }
@type t() :: %Minga.Parser.RequestState{ deferred: %{required(reference()) => deferred_request()}, fences: %{required(reference()) => pid()}, in_flight: %{required(non_neg_integer()) => in_flight_request()}, next_id: pos_integer() }
Functions
@spec defer(t(), reference(), deferred_request()) :: t()
Adds a deferred request and its buffer fence.
Removes a fence by token.
@spec emit(t(), in_flight_request()) :: {pos_integer(), t()}
Allocates an ID and records an emitted request.
@spec new() :: t()
Constructs empty parser request state.
@spec next_id(t()) :: pos_integer()
Returns the ID that will be allocated to the next emitted request.
@spec pop_deferred(t(), reference()) :: {deferred_request() | nil, t()}
Removes a deferred request by token.
@spec pop_in_flight(t(), non_neg_integer()) :: {in_flight_request() | nil, t()}
Removes an in-flight request by parser request ID.
@spec pop_in_flight_by_token(t(), reference()) :: {in_flight_request() | nil, t()}
Removes the in-flight request associated with a fence token.
@spec satisfy_fence(t(), reference(), pid(), non_neg_integer()) :: {:ok, t()} | :stale
Consumes a matching fence and records the snapshot sequence.
@spec take_all(t()) :: {[GenServer.from()], t()}
Removes every deferred, fenced, and in-flight request.
@spec take_buffer(t(), pid()) :: {[GenServer.from()], t()}
Removes every deferred, fenced, and in-flight request for one buffer.
@spec take_ready(t(), pid(), (deferred_request() -> boolean())) :: {[{reference(), deferred_request()}], t()}
Splits ready deferred requests for one synchronized buffer.