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

jallum / bedrock / fb3defeb951c4b0ad9552be01797f0e4e04d962f-PR-43

03 Sep 2025 03:45AM UTC coverage: 63.433% (+0.005%) from 63.428%
fb3defeb951c4b0ad9552be01797f0e4e04d962f-PR-43

Pull #43

github

jallum
Add conflict sharding with async resolver assignment

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
Pull Request #43: Add conflict sharding with async resolver assignment

63 of 95 new or added lines in 10 files covered. (66.32%)

2 existing lines in 2 files now uncovered.

3027 of 4772 relevant lines covered (63.43%)

615.91 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