Skip to content

v0.2.141

Choose a tag to compare

@sanity sanity released this 04 Oct 17:22
· 133 commits to main since this release
46bf200

Highlights

  • Hosting memory is now counted, not estimated (#5779). The hosting limit no longer charges a flat 1 MiB per hosted contract. Each hosted contract is charged the bytes the node actually holds for it: the distinct neighbour summaries stored for it plus fixed per-record and per-entry charges. The budget is a fixed share of the node's memory limit. Fleet telemetry showed 66.5% of peers stuck at the old limit while using a median of 20% of their memory. Closes #5647, #5334, #5781.
  • Neighbour interest records are freed when a contract stops being hosted (#5782). Evicting a contract previously left its neighbours' interest records and summaries in memory, and the contract stayed advertised.
  • Identical neighbour summaries are stored once per contract (#5787).
  • Transport: a re-armed stream listener no longer loses its wakeup (#5751).
  • Dashboard: normal states are no longer styled as alarms (#5769). Release tooling: Gate B waits for GitHub to serve the new release as latest before booting the canary (#5771). Dependency bumps, including redb 4.2.0 -> 4.3.0.

Operator notes (#5779)

  • A persisted non-default hosting-mem-share changes meaning. It used to be a share of spare memory added to current RSS; it is now a share of the whole memory limit. For example, a persisted 0.5 now lets hosted contracts hold 50% of the node's memory limit (1 GiB on a 2 GiB node), and draws a startup warning above that. The default (0.125) is unchanged.
  • Small shares are floored at 64 MiB: on a 2 GiB node any share below 1/32 gives a 64 MiB budget.
  • Removed telemetry series: hosting_estimated_resident_overhead_bytes (replaced by hosting_resident_overhead_bytes, which does not compare with it) and hosting_contract_slot_budget.
  • Row-shape change: network_efficiency_v1 keeps v: 1 while two rows get longer. Each populated row grows from 4 to 5 entries (rejected_oversized) and current from 5 to 6 (over_size_bound), both appended last so existing positions are unchanged. The broadcast payload mix gains tracked_missing_over_size_bound_sends and _bytes.
  • memory_rss_bytes is now reported on macOS and Windows as well as Linux.

Rollback signals (#5779)

The cap on contracts with tiny state rises from 508 to 32,768 on a 2 GiB node, and the hosting budget no longer reacts to memory pressure. Watch these per peer, against 0.2.140:

  • memory_rss_bytes against the memory limit (hosting_resident_overhead_budget_bytes times 8 at the default share): RSS approaching the limit, or OOM restarts, is the signal to roll back.
  • hosting_contract_count and CPU: a large rise in hosted contracts on small nodes with matching CPU growth.
  • hosting_resident_overhead_evicted_charged_bytes_total and hosting_resident_overhead_evictions_total: evictions should fall sharply from the current 73% of peers; a rise means the budget binds where it should not.
  • interest_summary_bound_trims_total, rejected_oversized and interest_neighbour_summary_bytes: these should stay well below their bounds. A sustained nonzero trim or refusal rate, or the node-wide bytes sitting at their cap, on many peers means honest summaries are being refused and deltas are falling back to full state.

[AI-assisted - Claude]

What's Changed

  • fix(dashboard): stop styling normal states as alarms by @sanity in #5769
  • fix(release): wait for GitHub to serve the release before Gate B boots the canary by @sanity in #5771
  • build(deps-dev): bump @babel/core from 7.23.2 to 7.29.7 in /tests/test-app-1 by @dependabot[bot] in #5738
  • build(deps): bump brace-expansion from 1.1.18 to 1.1.21 in /tests/test-app-1 by @dependabot[bot] in #5766
  • build(deps-dev): bump webpack-dev-middleware from 8.0.4 to 8.3.0 in /tests/test-app-1 by @dependabot[bot] in #5767
  • build(deps-dev): bump brace-expansion from 5.0.9 to 5.0.12 in /crates/core/src/server by @dependabot[bot] in #5768
  • build(deps): bump docker/setup-qemu-action from 3 to 4 by @dependabot[bot] in #5775
  • build(deps-dev): bump the npm-minor-and-patch group in /crates/core/src/server with 2 updates by @dependabot[bot] in #5777
  • build(deps): bump the nix group with 2 updates by @dependabot[bot] in #5778
  • fix(transport): keep the wakeup when a re-armed stream listener fires by @onlyabrak in #5751
  • build(deps): bump the cargo-minor-and-patch group across 1 directory with 17 updates by @dependabot[bot] in #5776
  • docs(conformance): correct stale "not wired into the node" module doc by @sanity in #5783
  • fix(interest): free neighbour interest records when a contract stops being hosted by @sanity in #5782
  • perf(interest): store identical neighbour summaries once per contract by @sanity in #5787
  • fix(hosting): count the memory hosted contracts hold instead of estimating 1 MiB each by @sanity in #5779
  • build: release 0.2.141 by @sanity in #5788

Full Changelog: v0.2.140...v0.2.141