DAOS-18531 vos: setup ts_set in vos_obj_incarnate()#17501
DAOS-18531 vos: setup ts_set in vos_obj_incarnate()#17501
Conversation
|
Ticket title is 'mdonssd phase 2: Assertion 'set_entry->se_create_idx != NULL' failed' |
|
Test stage Unit Test 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/ |
|
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/ |
|
Test stage NLT on EL 8.8 completed with status FAILURE. https://jenkins-3.daos.hpc.amslabs.hpecorp.net//job/daos-stack/job/daos/view/change-requests/job/PR-17501/1/execution/node/790/log |
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>
21bfea8 to
63cb471
Compare
|
Test stage NLT 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/2/testReport/ |
|
Test stage Test RPMs on EL 8.6 completed with status FAILURE. https://jenkins-3.daos.hpc.amslabs.hpecorp.net//job/daos-stack/job/daos/view/change-requests/job/PR-17501/2/execution/node/1028/log |
Allow-unstable-test: true
|
Test stage Functional on EL 8.8 completed with status FAILURE. https://jenkins-3.daos.hpc.amslabs.hpecorp.net//job/daos-stack/job/daos/view/change-requests/job/PR-17501/2/execution/node/1066/log |
|
Test stage NLT 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/3/testReport/ |
|
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-17501/3/execution/node/1343/log |
Nasf-Fan
left a comment
There was a problem hiding this comment.
It is better to add comment to explain when need to call vos_obj_hold() and when to call vos_obj_acquire(). As my understand, with your patch, for modification, the logic needs to call vos_obj_acquire() + vos_obj_incarnate(); otherwise, non-transactional operations will use vos_obj_hold(). If that is true, some logic inside vos_obj_hold() (for modification) can be removed, and maybe we can rename related functions to help understanding.
Sure, I can add some comments. My plan is to gradually deprecate the vos_obj_hold(), but let's postpone the code cleanup work after 2.8. |
Add comment for vos_obj_hold(). Signed-off-by: Niu Yawei <yawei.niu@hpe.com>
Allow-unstable-test: true
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:
Steps for the author:
After all prior steps are complete: