Ferricstore.Raft.ApplyContext (ferricstore v0.11.0)

Copy Markdown View Source

Immutable runtime limits used by deterministic Raft apply code.

The context is captured before a command reaches apply and stored with the replicated state-machine state. It contains only versioned, serializable values so snapshots and replay never depend on node-local application or process configuration.

Summary

Types

encoded()

@type encoded() :: tuple()

t()

@type t() :: %Ferricstore.Raft.ApplyContext{
  batch_command_apply_budget: pos_integer(),
  compound_member_apply_budget: pos_integer(),
  flow_default_history_hot_max_events: non_neg_integer(),
  flow_default_history_max_events: pos_integer(),
  flow_default_retention_ttl_ms: pos_integer(),
  flow_hibernation_enabled: boolean(),
  flow_hibernation_hot_window_ms: non_neg_integer(),
  flow_hibernation_late_promote_window_ms: non_neg_integer(),
  flow_hibernation_promote_window_ms: non_neg_integer(),
  flow_hibernation_safety_margin_ms: non_neg_integer(),
  flow_lmdb_history_cleanup_scan_limit: pos_integer(),
  flow_lmdb_value_cleanup_scan_limit: pos_integer(),
  flow_max_batch_items: pos_integer(),
  flow_max_history_hot_max_events: pos_integer(),
  flow_max_history_max_events: pos_integer(),
  flow_metadata_fields: %{optional(non_neg_integer()) => map()},
  flow_metadata_generation: non_neg_integer(),
  flow_metadata_mode: :dedicated | :shared,
  flow_metadata_schema_digest: <<_::256>>,
  flow_retention_cleanup_byte_budget: pos_integer(),
  flow_retention_cleanup_key_budget: pos_integer(),
  max_value_size: pos_integer(),
  promotion_threshold: non_neg_integer(),
  transaction_command_budget: pos_integer(),
  transaction_key_apply_budget: pos_integer(),
  transaction_result_byte_budget: pos_integer(),
  version: pos_integer()
}

Functions

decode(encoded)

@spec decode(term()) :: {:ok, t()} | {:error, :invalid_apply_context}

default()

@spec default() :: t()

encode(context)

@spec encode(t()) :: encoded()

from_runtime(overrides \\ [])

@spec from_runtime(keyword() | map()) :: t()

new(values)

@spec new(keyword() | map()) :: t()

valid?(context)

@spec valid?(term()) :: boolean()

with_flow_metadata(context, snapshot)

@spec with_flow_metadata(t(), FerricStore.Flow.MetadataExtension.Snapshot.t()) :: t()

wrap_command(command, context)

@spec wrap_command(tuple(), t()) :: tuple()