• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

jallum / bedrock / be2722ff8752e7822e8ee0288b74bb49e44f69d1

07 Sep 2025 09:57PM UTC coverage: 63.935% (+0.3%) from 63.674%
be2722ff8752e7822e8ee0288b74bb49e44f69d1

push

github

web-flow
Add conflict sharding with async resolver assignment (#43)

Move expensive conflict distribution off critical path by computing
resolver assignments asynchronously during batching instead of blocking
transaction acceptance. Improves throughput and reduces latency.

- Add ConflictSharding module to distribute conflicts by key range
- Implement async Task-based resolver assignment in batching
- Add LayoutOptimization for precomputed static structures
- Update Batch and finalization pipeline for Task integration
- Extract KeyRange.overlap? utility, remove ResolutionPlan

105 of 138 new or added lines in 12 files covered. (76.09%)

4 existing lines in 3 files now uncovered.

3292 of 5149 relevant lines covered (63.93%)

630.09 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/lib/bedrock/data_plane/commit_proxy/layout_optimization.ex
1
defmodule Bedrock.DataPlane.CommitProxy.LayoutOptimization do
2
  @moduledoc """
3
  Precomputes expensive static structures from TransactionSystemLayout to optimize
4
  per-batch transaction processing performance.
5
  """
6

7
  alias Bedrock.ControlPlane.Config.TransactionSystemLayout
8

9
  @max_key "\xff\xff\xff"
10

11
  @type precomputed_layout :: %{
12
          resolver_ends: [{Bedrock.key(), pid()}],
13
          resolver_refs: [pid()]
14
        }
15
  @spec precompute_from_layout(TransactionSystemLayout.t()) :: precomputed_layout()
16
  def precompute_from_layout(%{resolvers: resolvers} = _layout) do
NEW
17
    resolver_list = resolvers
×
NEW
18
    resolver_ends = calculate_resolver_ends_optimized(resolver_list)
×
NEW
19
    resolver_refs = Enum.map(resolver_list, &elem(&1, 1))
×
20

NEW
21
    %{
×
22
      resolver_ends: resolver_ends,
23
      resolver_refs: resolver_refs
24
    }
25
  end
26

27
  @spec calculate_resolver_ends_optimized([{Bedrock.key(), any()}]) :: [{Bedrock.key(), pid()}]
28
  defp calculate_resolver_ends_optimized(resolvers) do
NEW
29
    sorted_resolvers = Enum.sort_by(resolvers, fn {start_key, _ref} -> start_key end)
×
30

31
    sorted_resolvers
32
    |> Enum.with_index()
NEW
33
    |> Enum.map(fn {{_start_key, resolver_ref}, index} ->
×
NEW
34
      max_key_ex =
×
NEW
35
        if index + 1 < length(sorted_resolvers) do
×
NEW
36
          {next_start, _} = Enum.at(sorted_resolvers, index + 1)
×
NEW
37
          next_start
×
38
        else
39
          @max_key
40
        end
41

42
      {max_key_ex, resolver_ref}
43
    end)
44
  end
45
end
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc