Skip to content

DAOS-19548 rebuild: some rebuild fixes. - #18938

Open
wangshilong wants to merge 4 commits into
masterfrom
shilongw/DAOS-19548
Open

DAOS-19548 rebuild: some rebuild fixes.#18938
wangshilong wants to merge 4 commits into
masterfrom
shilongw/DAOS-19548

Conversation

@wangshilong

@wangshilong wangshilong commented Aug 26, 2026

Copy link
Copy Markdown
Contributor
  1. The rebuild leader publishes the global DTX resync version through riv_global_dtx_resyc_version. The target refresh path copied that field but used riv_dtx_resyc_version to decide whether the refresh carried any DTX progress.

  2. When a local rebuild task starts before the stable epoch is available,
    it waits for the epoch but then exits without migrating the object. This
    can silently skip local migration. Continue with ds_migrate_object()
    after the wait succeeds, and propagate migration failures to the rebuild
    tracker.

  3. When a queued rebuild task is merged with another rebuild request, refresh
    the task reclaim epoch as well. Otherwise the merged task can keep an
    older reclaim epoch and later schedule cleanup with an insufficient
    boundary.

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

The rebuild leader publishes the global DTX resync version through
riv_global_dtx_resyc_version.  The target refresh path copied that field
but used riv_dtx_resyc_version to decide whether the refresh carried any
DTX progress.

Signed-off-by: Wang Shilong <shilong.wang@hpe.com>
@github-actions

github-actions Bot commented Aug 26, 2026

Copy link
Copy Markdown

Ticket title is 'handle global DTX IV refresh'
Status is 'In Review'
https://daosio.atlassian.net/browse/DAOS-19548

Nasf-Fan
Nasf-Fan previously approved these changes Aug 26, 2026
liuxuezhao
liuxuezhao previously approved these changes Aug 26, 2026
Signed-off-by: Wang Shilong <shilong.wang@hpe.com>
@wangshilong
wangshilong dismissed stale reviews from liuxuezhao and Nasf-Fan via a8e3786 August 26, 2026 08:39
kccain
kccain previously approved these changes Aug 26, 2026

@kccain kccain left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On the leader side in rebuild_leader_status_notify() we might consider not sending the PS leader engine's own pool->sp_dtx_resync_version value in iv.riv_dtx_resync_version. Since the target engine's don't even look at that value. Perhaps it could be assigned on the leader side to RB_DTX_RESYNC_VER_SKIP.

Signed-off-by: Wang Shilong <shilong.wang@hpe.com>
@daosbuild3

Copy link
Copy Markdown
Collaborator

Comment thread src/rebuild/srv.c Outdated
rgt->rgt_dtx_resync_version = iv.riv_global_dtx_resyc_version =
rebuild_get_global_dtx_resync_ver(rgt);
iv.riv_dtx_resyc_version = pool->sp_dtx_resync_version;
iv.riv_dtx_resyc_version = RB_DTX_RESYNC_VER_SKIP;

@liuxuezhao liuxuezhao Aug 27, 2026

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is there a case require such change?

in rebuild_iv_ent_update() it returns when riv_sync is 1, will not call rebuild_global_status_update() so looks will not cause problem.
just it may cause a few confuse as RB_DTX_RESYNC_VER_SKIP with speicial meaning, if no required to change as that.
and the code with inconsistent with rebuild_tgt_status_check_ult()'s set iv.riv_dtx_resyc_version

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It does not require the change, you are right. No matter what value the leader assigns to iv.riv_dtx_resyc_version, it does not get consumed. Feel free to revert to pool->sp_dtx_resync_version to stay consistent with rebuild_tgt_status_check_ult(), Sorry for the churn.

When a local rebuild task starts before the stable epoch is available,
it waits for the epoch but then exits without migrating the object.  This
can silently skip local migration.  Continue with ds_migrate_object()
after the wait succeeds, and propagate migration failures to the rebuild
tracker.

When a queued rebuild task is merged with another rebuild request, refresh
the task reclaim epoch as well.  Otherwise the merged task can keep an
older reclaim epoch and later schedule cleanup with an insufficient
boundary.

Features: rebuild
Signed-off-by: Wang Shilong <shilong.wang@hpe.com>
@daosbuild3

Copy link
Copy Markdown
Collaborator

Test stage Functional Hardware Medium Verbs Provider 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-18938/5/execution/node/950/log

@wangshilong
wangshilong requested a review from liuxuezhao August 31, 2026 04:37
@wangshilong wangshilong changed the title DAOS-19548 rebuild: handle global DTX IV refresh DAOS-19548 rebuild: some rebuild fixes. Aug 31, 2026
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.

5 participants