Bedrock.DataPlane.Sequencer (bedrock v0.6.0)

View Source

Global version authority implementing Lamport clock semantics for MVCC transactions.

The Sequencer assigns monotonically increasing version numbers that establish global ordering for transactions. Read versions provide consistent snapshot points while commit versions establish transaction ordering for conflict detection.

Each commit version assignment updates the Lamport clock, ensuring the version pair returned maintains proper causality relationships needed for distributed MVCC conflict resolution.

Summary

Types

ref()

@type ref() :: pid() | atom() | {atom(), node()}

Functions

next_commit_version(t, epoch, opts \\ [])

@spec next_commit_version(
  ref(),
  Bedrock.epoch(),
  opts :: [{:timeout_in_ms, Bedrock.timeout_in_ms()}]
) ::
  {:ok, last_commit_version :: Bedrock.version(),
   next_commit_version :: Bedrock.version(),
   known_committed_version :: Bedrock.version()}
  | {:error, :unavailable | :wrong_epoch}

next_read_version(t, epoch, opts \\ [])

@spec next_read_version(
  ref(),
  Bedrock.epoch(),
  opts :: [{:timeout_in_ms, Bedrock.timeout_in_ms()}]
) :: {:ok, Bedrock.version()} | {:error, :unavailable | :wrong_epoch}

report_successful_commit(t, epoch, commit_version, opts \\ [])

@spec report_successful_commit(
  ref(),
  Bedrock.epoch(),
  commit_version :: Bedrock.version(),
  opts :: [{:timeout_in_ms, Bedrock.timeout_in_ms()}]
) :: :ok | {:error, :unavailable | :wrong_epoch}

start_link(opts)