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

bedrock-kv / bedrock / 61a4dcd8c18adf906201889e2b8e99c534e06ac2
74%
develop: 66%

Build:
Build:
LAST BUILD BRANCH: main
DEFAULT BRANCH: develop
Ran 16 Mar 2026 05:59PM UTC
Jobs 2
Files 216
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

16 Mar 2026 05:58PM UTC coverage: 66.239% (+0.2%) from 66.004%
61a4dcd8c18adf906201889e2b8e99c534e06ac2

push

github

web-flow
fix: make consistent-hash recovery routing deterministic (#72)

Closes #68.

## Summary

This PR fixes the fresh-cluster consistent-hash routing bug by making
empty-descriptor routing deterministic and shared across
recovery/bootstrap paths.

This PR keeps scope intentionally narrow:
- adds a shared internal `LayoutRouting` helper for deterministic log
ordering and shard-to-log selection
- uses that helper in materializer bootstrap for empty-descriptor
layouts
- uses the same helper when recovery rebuilds commit-proxy routing data
and when live routing data adds/removes logs
- rejects mixed empty/non-empty log descriptor modes so routing
semantics are not ambiguous

It does **not** include the Olivine waitlist timeout hardening or the
persisted restart recovery investigation.

## Why

Fresh-cluster recovery stores log descriptors as empty lists under the
consistent-hashing model. The old bootstrap path still treated
descriptors like shard-tag filters, so materializers could be unlocked
with the wrong log set.

Separately, recovery-time topology reconstruction and live commit-proxy
routing were rebuilding log order independently. This PR makes those
paths agree on one deterministic routing model for empty-descriptor
layouts.

## Tests

- `mix test test/bedrock/internal/layout_routing_test.exs
test/bedrock/control_plane/director/recovery/materializer_bootstrap_phase_test.exs
test/bedrock/control_plane/director/recovery/topology_phase_test.exs
test/bedrock/control_plane/director/recovery/tsl_validation_phase_test.exs
test/bedrock/data_plane/commit_proxy/routing_data_test.exs`

43 of 43 new or added lines in 5 files covered. (100.0%)

1 existing line in 1 file now uncovered.

5213 of 7870 relevant lines covered (66.24%)

1951.96 hits per line

Uncovered Existing Lines

Lines Coverage ∆ File
1
88.28
0.0% lib/bedrock/data_plane/transaction.ex
Jobs
ID Job ID Ran Files Coverage
1 61a4dcd8c18adf906201889e2b8e99c534e06ac2.1 16 Mar 2026 05:59PM UTC 216
66.1
GitHub Action Run
2 61a4dcd8c18adf906201889e2b8e99c534e06ac2.2 16 Mar 2026 05:59PM UTC 216
66.15
GitHub Action Run
Source Files on build 61a4dcd8c18adf906201889e2b8e99c534e06ac2
  • Tree
  • List 216
  • Changed 8
  • Source Changed 0
  • Coverage Changed 8
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • 61a4dcd8 on github
  • Prev Build on main (#81EF5213...)
  • Next Build on main (#B8CBBBE1...)
  • Delete
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