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

jallum / bedrock / ca26ce31cb47417eebd0556e6b6b89e5ee3d09c7-PR-43

07 Sep 2025 09:21PM UTC coverage: 63.935% (+0.3%) from 63.674%
ca26ce31cb47417eebd0556e6b6b89e5ee3d09c7-PR-43

Pull #43

github

jallum
Add periodic tree sweeping to Resolver for memory management

Implement automatic cleanup of old transaction versions in resolver interval trees:

- Add configurable sweep_interval_ms (1s default) and version_retention_ms (6s default)
- Extend State and Server to track sweep timing and configuration
- Sweep triggers when timeout is :infinity or sweep interval elapsed
- Use optimized bulk tree filtering with single rebalance for performance
- Update tests to handle new resolver initialization signature
- Add property tests validating filter correctness
Pull Request #43: Add conflict sharding with async resolver assignment

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

6 existing lines in 3 files now uncovered.

3292 of 5149 relevant lines covered (63.93%)

1277.06 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