test(scanner): measure heal pacing and cache cost (#7433)

* test(scanner): measure heal pacing and cache cost

Co-Authored-By: heihutu <heihutu@gmail.com>

Co-Authored-By: zhi22915 <qiuzgang@gmail.com>

* fix(error): merge equivalent api message branches

Co-Authored-By: heihutu <heihutu@gmail.com>

Co-Authored-By: zhi22915 <qiuzgang@gmail.com>

* fix(heal): cleanup consumed MRF replay journals

Do not retain Accepted or Merged replay intents as startup anchors after they have been handed to the heal manager. Only refused or still-pending replay records keep the journal on disk until a successor snapshot can persist them.

This keeps successor snapshots limited to the pending queue, which lets successful replay remove both authoritative and legacy journal paths and restores the crash-boundary tests around successor flush.

Co-Authored-By: heihutu <heihutu@gmail.com>

Co-Authored-By: zhi22915 <qiuzgang@gmail.com>
(cherry picked from commit d5b8f49c9d)

---------

Co-authored-by: zhi22915 <qiuzgang@gmail.com>
Co-authored-by: Zhengchao An <anzhengchao@gmail.com>
This commit is contained in:
houseme
2026-09-08 07:22:10 +08:00
committed by GitHub
parent bc468a4986
commit 585b5e1c52
3 changed files with 153 additions and 1 deletions
@@ -125,6 +125,11 @@ and `metrics`. All metrics must be finite nonnegative numbers: `p99_ms`,
`throughput_ops`, `rss_bytes`, `cpu_seconds`, `iops`, `rpc_count`,
`cache_clone_bytes`, `encode_bytes`, `save_bytes`, `oldest_age_seconds`,
`walk_objects`, `cold_walk_objects`, `healed_objects`, `errors`, and `requests`.
The adapter also reports the measurement-window delta of
`rustfs_heal_mainline_throttle_total{source="admin",result="delayed"}` as
`heal_mainline_throttle_delayed`; a cumulative process-lifetime value is not a
valid input.
The clone, encode, and save byte fields are also deltas from the same window.
Requests, throughput, and p99 must be positive; errors must be zero. Repair
counts must match the manifest when background work is on. Keep underlying
request samples, counter reset checks, profiler captures, and per-node telemetry
@@ -132,6 +137,19 @@ in the cell artifact directory; aggregate values alone do not establish their
measurement provenance. Missing production instrumentation is a pending gate,
not permission to report a fabricated zero.
Each comparison records a `w22` section with clone, encode, and save bytes per
walked object, clone/encode and save/encode byte ratios, and candidate changes.
These are traffic amplification indicators, not allocation attribution or an
fsync profile. The `running-heal` build comparison also records a `w10`
section. `status=observed` requires sampled high foreground pressure, at least
one admin pacing delay in the same window, and an improvement in either
foreground p99 or throughput. `no_measured_benefit` means pacing ran but neither
foreground metric improved; `pending` means the run did not prove that pacing
engaged; `inconclusive` means ABBA repeatability failed. Baseline and candidate
delay counts are both retained so an operator can reject unrelated or
process-lifetime counter contamination. Correct repair oracles and the existing
regression limits still apply in every case.
For P2, `measure.convergence` contains booleans `writes_stopped`,
`last_mutation_observed`, `first_complete_publication`; numeric
`last_mutation_time`, `last_mutation_observed_time`, `writes_stopped_time`, `window_start`, `window_end`,