Skip to content

DAOS-17449 object: pin migration enumeration to one shard - #19309

Merged
gnailzenh merged 1 commit into
release/2.8from
lxz/rb_enum_shard_28
Oct 18, 2026
Merged

gnailzenh merged 1 commit into
release/2.8from
lxz/rb_enum_shard_28

Conversation

@liuxuezhao

Copy link
Copy Markdown
Contributor

Replicated-object migration enumerates a shard in batches and resumes with the VOS anchors returned by the previous batch. If the leader returned an error (e.g. -DER_REBUILD_DELAY from the rebuild fence right after a failure), migrate_obj_epoch() fell back to a random non-leader replica for the next attempt, and after each successful batch it restored DIOF_TO_LEADER, so one enumeration could hop between replicas.

The evtree recx anchor is the last visible extent of the shard that produced it, and evt_iter_probe_find() positions by overlap. Replicas have differently-shaped visible extents (independent aggregation, split/overwrite ordering), so re-probing an anchor on another replica skips the extents up to the next boundary. Those extents were never listed, never migrated, and rebuild still reported success: the rebuilt shard silently lacks committed data (zeroed 64K blocks seen by fio verify in the field and by the REBUILD50 reproducer, runs 20-22).

Fix:

  • obj_list_obj_cb() records the shard that served a non-EOF migration batch in dkey_anchor->da_shard.
  • migrate_obj_epoch() pins all following batches to that shard with DIOF_TO_SPEC_SHARD instead of returning to the leader or picking another random replica, and keeps retrying in place on -DER_INPROGRESS once pinned.
  • -DER_REBUILD_DELAY from the leader is retried on the leader (bounded) rather than immediately switching to a non-leader replica.

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).

@github-actions

Copy link
Copy Markdown

Errors are Unable to load ticket data
https://daosio.atlassian.net/browse/DAOS-17449

Replicated-object migration enumerates a shard in batches and resumes
with the VOS anchors returned by the previous batch.  If the leader
returned an error (e.g. -DER_REBUILD_DELAY from the rebuild fence right
after a failure), migrate_obj_epoch() fell back to a random non-leader
replica for the next attempt, and after each successful batch it
restored DIOF_TO_LEADER, so one enumeration could hop between replicas.

The evtree recx anchor is the last visible extent of the shard that
produced it, and evt_iter_probe_find() positions by overlap.  Replicas
have differently-shaped visible extents (independent aggregation,
split/overwrite ordering), so re-probing an anchor on another replica
skips the extents up to the next boundary.  Those extents were never
listed, never migrated, and rebuild still reported success: the
rebuilt shard silently lacks committed data (zeroed 64K blocks seen by
fio verify in the field and by the REBUILD50 reproducer, runs 20-22).

Fix:
- obj_list_obj_cb() records the shard that served a non-EOF migration
  batch in dkey_anchor->da_shard.
- migrate_obj_epoch() pins all following batches to that shard with
  DIOF_TO_SPEC_SHARD instead of returning to the leader or picking
  another random replica, and keeps retrying in place on
  -DER_INPROGRESS once pinned.
- -DER_REBUILD_DELAY from the leader is retried on the leader (bounded)
  rather than immediately switching to a non-leader replica.

Signed-off-by: Xuezhao Liu <xuezhao.liu@hpe.com>
@gnailzenh
gnailzenh changed the base branch from liang/b2_8_cp_fio_fix_oct17 to release/2.8 October 17, 2026 23:44
@gnailzenh
gnailzenh requested review from a team as code owners October 17, 2026 23:44
@liuxuezhao
liuxuezhao force-pushed the lxz/rb_enum_shard_28 branch from 931b86a to 2c2e682 Compare October 17, 2026 23:58
@liuxuezhao
liuxuezhao requested review from Nasf-Fan, gnailzenh and wangshilong and removed request for a team October 18, 2026 00:06
@wangshilong

Copy link
Copy Markdown
Contributor

Very nice catch

@daosbuild3

Copy link
Copy Markdown
Collaborator

Test stage Functional Hardware Large MD on SSD completed with status FAILURE. https://jenkins-3.daos.hpc.amslabs.hpecorp.net//job/daos-stack/job/daos/view/change-requests/job/PR-19309/3/execution/node/1787/log

@liuxuezhao

Copy link
Copy Markdown
Contributor Author

Test stage Functional Hardware Large MD on SSD completed with status FAILURE. https://jenkins-3.daos.hpc.amslabs.hpecorp.net//job/daos-stack/job/daos/view/change-requests/job/PR-19309/3/execution/node/1787/log

only one test failure dfs.py, should due to https://daosio.atlassian.net/browse/DAOS-19284, its fix is waiting backport to 2.8. It is unrelated to this PR.

@gnailzenh
gnailzenh merged commit 0307e52 into release/2.8 Oct 18, 2026
58 of 60 checks passed
@gnailzenh
gnailzenh deleted the lxz/rb_enum_shard_28 branch October 18, 2026 15:58
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.

4 participants