Bedrock.Internal.TransactionBuilder.RangeReads (bedrock v0.5.3)

View Source

Range read operations for the Transaction Builder.

This module handles all range-related fetching operations, including version management, storage coordination, and result processing for both regular key ranges and key selector ranges.

Summary

Functions

Execute a range batch query against storage servers.

Fetch a KeySelector range within the transaction context.

Types

range_fn()

@type range_fn() :: ([Bedrock.key_value()] -> Bedrock.key_range())

storage_get_range_fn()

@type storage_get_range_fn() :: (pid(),
                           binary(),
                           binary(),
                           Bedrock.version(),
                           keyword() ->
                             {:ok, {[Bedrock.key_value()], more :: boolean()}}
                             | {:error, atom()})

storage_get_range_selector_fn()

@type storage_get_range_selector_fn() :: (pid(),
                                    Bedrock.KeySelector.t(),
                                    Bedrock.KeySelector.t(),
                                    Bedrock.version(),
                                    keyword() ->
                                      {:ok,
                                       {[Bedrock.key_value()],
                                        more :: boolean()}}
                                      | {:error, atom()})

Functions

get_range(state, range, batch_size, opts \\ [])

@spec get_range(
  Bedrock.Internal.TransactionBuilder.State.t(),
  Bedrock.key_range(),
  batch_size :: pos_integer(),
  opts :: [storage_get_range_fn: storage_get_range_fn(), snapshot: boolean()]
) ::
  {Bedrock.Internal.TransactionBuilder.State.t(),
   {:ok, {[{binary(), Bedrock.value()}], more :: boolean()}}
   | {:error, :timeout | :unavailable | :version_too_new}
   | {:failure,
      %{
        required(
          :timeout
          | :unavailable
          | :version_too_old
          | :no_servers_to_race
          | :layout_lookup_failed
        ) => [pid()]
      }}}

Execute a range batch query against storage servers.

This function handles version initialization, storage team coordination, and result processing for range queries with regular keys.

get_range_selectors(state, start_selector, end_selector, batch_size, opts \\ [])

@spec get_range_selectors(
  Bedrock.Internal.TransactionBuilder.State.t(),
  Bedrock.KeySelector.t(),
  Bedrock.KeySelector.t(),
  batch_size :: pos_integer(),
  opts :: [
    storage_get_range_fn: storage_get_range_selector_fn(),
    snapshot: boolean()
  ]
) ::
  {Bedrock.Internal.TransactionBuilder.State.t(),
   {:ok, {[Bedrock.key_value()], more :: boolean()}}
   | {:error, :timeout | :unavailable | :version_too_new}
   | {:failure,
      %{
        required(
          :timeout
          | :unavailable
          | :version_too_old
          | :no_servers_to_race
          | :layout_lookup_failed
        ) => [pid()]
      }}}

Fetch a KeySelector range within the transaction context.

This handles the transaction state management in addition to KeySelector range resolution.