Bedrock.DataPlane.Resolver (bedrock v0.5.3)
View SourceMVCC conflict detection engine for Bedrock's optimistic concurrency control system.
The Resolver detects read-write and write-write conflicts by maintaining an interval tree that tracks which key ranges were written at which versions. It processes transaction batches from Commit Proxies and returns lists of conflicting transaction indices to abort.
Resolvers start in running mode and are immediately ready to process transactions. They handle out-of-order transactions through a version-indexed waiting queue that ensures consistent conflict detection regardless of network timing variations.
Metadata Distribution
The Resolver also acts as a distribution point for system metadata mutations (keys with \xFF prefix). Each request includes metadata mutations per transaction, and the response includes differential metadata updates for the calling proxy.
Summary
Types
@type metadata_mutations() :: [Bedrock.Internal.TransactionBuilder.Tx.mutation()]
Functions
@spec resolve_transactions( ref(), epoch :: Bedrock.epoch(), last_version :: Bedrock.version(), commit_version :: Bedrock.version(), [Bedrock.DataPlane.Transaction.encoded()], metadata_per_tx :: [metadata_mutations()], opts :: [{:timeout, Bedrock.timeout_in_ms()}] ) :: {:ok, aborted :: [transaction_index :: non_neg_integer()], metadata_updates :: [Bedrock.DataPlane.Resolver.MetadataAccumulator.entry()]} | {:failure, :timeout, ref()} | {:failure, :unavailable, ref()}