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

bedrock-kv / bedrock / 153a2b626a39a3f370c0bdbbefd8db745a41324d
82%

Build:
DEFAULT BRANCH: develop
Ran 14 Sep 2026 07:46PM UTC
Jobs 1
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

14 Sep 2026 07:45PM UTC coverage: 81.661% (+0.06%) from 81.603%
153a2b626a39a3f370c0bdbbefd8db745a41324d

push

github

web-flow
bedrock-3t9: seed a fresh cluster's sizing from the node config the durability check validates (#323)

Tracks bedrock-3t9.

## Why

Strict durability mode is supposed to refuse to start a cluster that
can't meet the durability profile — three logs, replication factor
three. The guides tell you to satisfy it with node config:

```elixir
config :my_app, MyCluster,
  durability_mode: :strict,
  durability: [desired_logs: 3, desired_replication_factor: 3]
```

`ClusterSupervisor.init/1` checks exactly that node config, and it
passes. But nothing ever *applied* it: a fresh cluster's parameters come
from `Config.new/1` → `Parameters.new/1`, which hardcodes `desired_logs:
1, desired_replication_factor: 1`. In a three-node harness cluster
configured as above, every node started cleanly in strict mode and the
cluster ran with a single log. `Bedrock.Durability.profile(MyCluster)` —
which prefers the live cluster config — reported `:failed`, and nothing
acted on it. The guardrail was checking a number the cluster ignored,
and there was no configuration path to more than one log at all.

## What changed

When a coordinator starts the first recovery of a fresh cluster (no
bootstrap record in object storage),
`DirectorManagement.maybe_put_default_config/1` now seeds `desired_logs`
and `desired_replication_factor` from the same evaluation the startup
check performs — `Profile.evaluate(node_config).checks.*.actual` —
instead of leaving `Config.new/1`'s hardcoded ones. Those parameters are
persisted in the first cluster bootstrap, so later boots and recoveries
keep them.

Existing clusters are untouched: once a bootstrap exists its parameters
win, and editing node config afterwards does not resize the cluster
(that needs an operator write path — bedrock-q67.51).
`guides/durability-profile.md` now says so, and that `durability:` must
be identical across coordinator nodes, since the seed comes from
whichever coordinator leads the first recovery.

## How it works

Readin... (continued)

7 of 7 new or added lines in 1 file covered. (100.0%)

2 existing lines in 2 files now uncovered.

7187 of 8801 relevant lines covered (81.66%)

1138.58 hits per line

Coverage Regressions

Lines Coverage ∆ File
1
93.25
-0.61% lib/bedrock/data_plane/materializer/olivine/index_update.ex
1
73.56
0.0% lib/bedrock/data_plane/resolver/tree.ex
Jobs
ID Job ID Ran Files Coverage
1 153a2b626a39a3f370c0bdbbefd8db745a41324d.1 14 Sep 2026 07:46PM UTC 216
81.66
GitHub Action Run
Source Files on build 153a2b626a39a3f370c0bdbbefd8db745a41324d
  • Tree
  • List 216
  • Changed 4
  • Source Changed 0
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • 153a2b62 on github
  • Prev Build on develop (#3AF051C2...)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc