Skip to content

Trace extent 0 jobs to explain read mismatches after live-repair - #2056

Draft
leftwo wants to merge 2 commits into
mainfrom
alan/lr-extent-trace
Draft

leftwo wants to merge 2 commits into
mainfrom
alan/lr-extent-trace

Conversation

@leftwo

@leftwo leftwo commented Oct 26, 2026

Copy link
Copy Markdown
Contributor

This PR is just for debugging, it should not be merged.

An attempt to gather more information in the case of 1987, which so far has only been seen on extent 0.

Keep a bounded record of the jobs that write to or live-repair extent 0:

  • The block contexts written
  • What each client was told to do with the job
  • The dependencies each client was sent
  • Where live-repair was,
  • Each client's final state

On a read hash mismatch, add every traced job for each mismatched block to the panic message, marking which write produced the expected and the computed contexts.

Log the source and target extent info that live-repair compares for each extent, and whether it decided to repair.

When live-repair closes a traced extent, log the close's full dependency list and every active job that touches the extent.

Stuff all this in the panic string so we are sure to see it.

An attempt to gather more information in the case of 1987, which
so far has only been seen on extent 0.

Keep a bounded record of the jobs that write to or live-repair
extent 0:
- The block contexts written
- What each client was told to do with the job
- The dependencies each client was sent
- Where live-repair was,
- Each client's final state

On a read hash mismatch, add every traced job for each mismatched
block to the panic message, marking which write produced the
expected and the computed contexts.

Log the source and target extent info that live-repair compares for
each extent, and whether it decided to repair.

When live-repair closes a traced extent, log the close's full
dependency list and every active job that touches the extent.

Stuff all this in the panic string so we are sure to see it.
Focus the trace on whether a write landed after live-repair closed
the extent (A), or the extent info it compared was wrong (C).

When a client acks live-repair's close of a traced extent, log the writes
to that extent, enqueued before the close, that the client has not
finished, and whether each is in the close's dependencies.  Keep these
in the trace for the panic message.

Number each client's completions in the order they arrive, and record
them for traced jobs.  On a read mismatch call out any write to the
block that finished on a client after live-repair's close of its extent.

Keep the last 4 writes to each traced block rather than the last 4096
jobs.  Keep every write that was active when live-repair closed its
extent so the writes behind a mismatch are still there no matter how
long after the repair it shows up.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant