Skip to content

CP fio hotfix oct17 - #19308

Open
gnailzenh wants to merge 9 commits into
release/2.8from
liang/b2_8_cp_fio_fix_oct17
Open

gnailzenh wants to merge 9 commits into
release/2.8from
liang/b2_8_cp_fio_fix_oct17

Conversation

@gnailzenh

Copy link
Copy Markdown
Collaborator

Steps for the author:

  • Commit message follows the guidelines.
  • Appropriate Features or Test-tag pragmas were used.
  • Appropriate Functional Test Stages were run.
  • At least two positive code reviews including at least one code owner from each category referenced in the PR.
  • Testing is complete. If necessary, forced-landing label added and a reason added in a comment.

After all prior steps are complete:

  • Gatekeeper requested (daos-gatekeeper added as a reviewer).

Nasf-Fan and others added 9 commits October 17, 2026 16:54
Squash the complete PR #19267, including its release/2.8 merge resolutions. Wait for local stable epochs before scanning, delay and retry rebuild work racing inflight I/O, and rate-limit rebuild-delay logging. Preserve reclaim handling and the functional-test timeout updates.

Signed-off-by: Fan Yong <fan.yong@hpe.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
When splitting an extent at EC stripe boundaries, merge_recx_insert()
can inherit the epoch of an unrelated preceding extent even when the
two extents do not merge. This can stamp rebuilt data above its real
epoch and make older recovery reads miss the correct version.

Keep the incoming epoch when creating a separate list entry. Retain
the maximum contributing epoch only when extents actually merge.

Extract the recx insertion fix from PR #19201 independently of its
other migration and EC aggregation changes.

Signed-off-by: Mohamad Chaarawi <mohamad.chaarawi@hpe.com>
Signed-off-by: Liang Zhen <gnailzenh@gmail.com>
Require direct data-shard reads when fetching cells for parity updates,
parity recalculation, and hole processing. Set DIOF_EC_NO_DEGRADE at
both aggregation data-fetch sites so unavailable data causes the
operation to fail rather than reconstruct input from existing parity.

This conservatively avoids feeding parity-derived data back into
aggregation. Normal application degraded reads remain unchanged.

Keep this safeguard from PR #19201 separate from the recx epoch fix.

Signed-off-by: Mohamad Chaarawi <mohamad.chaarawi@hpe.com>
Signed-off-by: Liang Zhen <gnailzenh@gmail.com>
The peer parity update and hole-processing workers overwrite local
errors with peer_rc at exit. If failure occurs before peer RPCs are
processed, peer_rc remains zero and the worker incorrectly reports
success, allowing local modifications despite the failed operation.

When no peer update succeeded, return the recorded peer error or, if
none exists, the local error. Preserve the existing success policy
when at least one peer update has completed.

Keep this error propagation fix from PR #19201 in a separate commit.

Signed-off-by: Mohamad Chaarawi <mohamad.chaarawi@hpe.com>
Signed-off-by: Liang Zhen <gnailzenh@gmail.com>
A non-leader parity shard can leave replicas for the aggregation
leader while advancing its local scan watermark to the end of the
range. The next round may skip those unchanged keys and forget the
replicas that should still hold back reported aggregation progress.

Cap watermark advancement below the earliest unaggregated epoch so
subsequent rounds revisit retained replicas. Preserve monotonicity
and normal progress when no unfinished work constrains the range.

Keep this sixth-bullet fix from PR #19201 separate from migration
invalidation and reporting-pipeline changes.

Signed-off-by: Mohamad Chaarawi <mohamad.chaarawi@hpe.com>
Signed-off-by: Liang Zhen <gnailzenh@gmail.com>
- Only merge contiguous recxs of the same stripe when they are written
  at the same epoch, so replica extents enumerated from a parity shard
  keep their enumerated epochs instead of being lifted to the max.
- Do not lose the return code of the last migrate_update_parity() call
  of an iod when more iods follow.
- Do not merge enumerated recxs into a migrate_one created from a
  different kind of source shard (parity vs data), as the write epoch
  semantics differ.

Signed-off-by: Mohamad Chaarawi <mohamad.chaarawi@hpe.com>
Signed-off-by: Liang Zhen <gnailzenh@gmail.com>
Do not coalesce adjacent recxs unless their epochs match.
This prevents packing from promoting older extents to a newer epoch
before parity migration can preserve their individual replay epochs.
Adjust insertion positioning to keep unmerged adjacent recxs ordered.
Retain existing overlap merging and stripe-boundary restrictions.

Signed-off-by: Liang Zhen <gnailzenh@gmail.com>
Revalidate DTX entry identity, epoch, version and state after pinning
and WAL reservation, both of which may yield to other ULTs.
Reject stale aborts and protect committed or partially committed
transactions from record removal. Use the current DTX handle while
preserving forced-abort cleanup semantics.

Signed-off-by: Liang Zhen <gnailzenh@gmail.com>
Request synchronous DTX commit for ordinary updates and punches whose
target layout includes rebuilding or reintegrating shards, reducing
the window in which successful I/O remains prepared on participants.

Signed-off-by: Liang Zhen <gnailzenh@gmail.com>
Signed-off-by: Fan Yong <fan.yong@hpe.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@gnailzenh
gnailzenh requested review from a team as code owners October 17, 2026 09:00
@github-actions

Copy link
Copy Markdown

Errors are component not formatted correctly,Ticket number prefix incorrect,PR title is malformatted. See https://daosio.atlassian.net/wiki/spaces/DC/pages/11133911069/Commit+Comments,Unable to load ticket data
https://daosio.atlassian.net/browse/CP

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

3 participants