Skip to content

DAOS-18531 vos: setup ts_set in vos_obj_incarnate()#17957

Open
NiuYawei wants to merge 1 commit intorelease/2.8from
niu/release-28/DAOS-18531-ts_set
Open

DAOS-18531 vos: setup ts_set in vos_obj_incarnate()#17957
NiuYawei wants to merge 1 commit intorelease/2.8from
niu/release-28/DAOS-18531-ts_set

Conversation

@NiuYawei
Copy link
Copy Markdown
Contributor

@NiuYawei NiuYawei commented Apr 9, 2026

Replace the vos_obj_hold() call before vos_obj_incarnate() with vos_obj_acquire() to ensure the ts_set setup is fully done within transaction, that can make code cleaner and avoid following race:

  • Updater A called vos_obj_hold(), it failed to find the OI and mark the obj entry in ts_set as negative.
  • Updater A yield.
  • Concurrent updater B created OI and setup obj->obj_df.
  • Updater A resumed to call vos_obj_incarnate(), it found that the obj->obj_df is non-NULL so skipped OI creation.
  • The ts_set for updater A is now in an inconsistent state, it's negative but without 'se_create_idx' set.

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

Replace the vos_obj_hold() call before vos_obj_incarnate() with
vos_obj_acquire() to ensure the ts_set setup is fully done within
transaction, that can make code cleaner and avoid following race:

- Updater A called vos_obj_hold(), it failed to find the OI and
  mark the obj entry in ts_set as negative.
- Updater A yield.
- Concurrent updater B created OI and setup obj->obj_df.
- Updater A resumed to call vos_obj_incarnate(), it found that
  the obj->obj_df is non-NULL so skipped OI creation.
- The ts_set for updater A is now in an inconsistent state, it's
  negative but without 'se_create_idx' set.

Signed-off-by: Niu Yawei <yawei.niu@hpe.com>
@NiuYawei NiuYawei requested review from a team as code owners April 9, 2026 13:25
@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 9, 2026

Ticket title is 'mdonssd phase 2: Assertion 'set_entry->se_create_idx != NULL' failed'
Status is 'In Progress'
Labels: 'md_on_ssd2,request_for_2.6.5,request_for_2.8,test_2.8,testp1'
https://daosio.atlassian.net/browse/DAOS-18531

@daosbuild3
Copy link
Copy Markdown
Collaborator

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.

2 participants