Skip to content

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

Open
NiuYawei wants to merge 2 commits intomasterfrom
niu/DAOS-18531
Open

DAOS-18531 vos: setup ts_set in vos_obj_incarnate()#17501
NiuYawei wants to merge 2 commits intomasterfrom
niu/DAOS-18531

Conversation

@NiuYawei
Copy link
Contributor

@NiuYawei NiuYawei commented Feb 4, 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).

@github-actions
Copy link

github-actions bot commented Feb 4, 2026

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

@daosbuild3
Copy link
Collaborator

@daosbuild3
Copy link
Collaborator

Test stage Unit Test with memcheck on EL 8.8 completed with status UNSTABLE. https://jenkins-3.daos.hpc.amslabs.hpecorp.net/job/daos-stack/job/daos//view/change-requests/job/PR-17501/1/testReport/

@daosbuild3
Copy link
Collaborator

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>
@daosbuild3
Copy link
Collaborator

@daosbuild3
Copy link
Collaborator

@daosbuild3
Copy link
Collaborator

@NiuYawei NiuYawei marked this pull request as ready for review February 5, 2026 13:45
@NiuYawei NiuYawei requested review from a team as code owners February 5, 2026 13:45
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