DAOS-19548 rebuild: some rebuild fixes. - #18938
Conversation
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>
|
Ticket title is 'handle global DTX IV refresh' |
Signed-off-by: Wang Shilong <shilong.wang@hpe.com>
kccain
left a comment
There was a problem hiding this comment.
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>
|
Test stage Functional on EL 9 completed with status FAILURE. https://jenkins-3.daos.hpc.amslabs.hpecorp.net//job/daos-stack/job/daos/view/change-requests/job/PR-18938/3/execution/node/1196/log |
| 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; |
There was a problem hiding this comment.
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
There was a problem hiding this comment.
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>
|
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 |
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.
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.
Steps for the author:
After all prior steps are complete: