Repository navigation
DAOS-18690 vos: fix engine crash when extend committed DTX table - #18671
Conversation
|
Ticket title is 'Aurora daos_user: SCM single target ran out of space (min:0 B) and not able to finish GC. ' |
23eab47 to
71c21bd
Compare
|
Test stage Unit Test completed with status UNSTABLE. https://jenkins-3.daos.hpc.amslabs.hpecorp.net/job/daos-stack/job/daos//view/change-requests/job/PR-18671/2/testReport/ |
|
Test stage Unit Test with memcheck completed with status UNSTABLE. https://jenkins-3.daos.hpc.amslabs.hpecorp.net/job/daos-stack/job/daos//view/change-requests/job/PR-18671/2/testReport/ |
There was a problem hiding this comment.
Thanks @Nasf-Fan — cross-checked against #18612 and everything landed: flag consistency, full failure_behavior unwind (no dangling refs), and the commit path (vos_dtx_commit_internal) is fully NO_ABORT-protected, so the crash can't recur. Nice that UMEM010 now covers the xadd_ptr path too. LGTM.
Two non-blocking checks:
vos_dtx_extend_act_table()/vos_dtx_set_flags_one()reverted to plainumem_tx_add_ptr()(abort on failure) — intentional for those non-commit paths?- UMEM010 runs under
setup_pmemonly; the reported crash was on md-on-SSD (DAV). Same coverage as #18612, just flagging in case a bmem variant is wanted.
I will add new test cases to cover bmem and bmem_v2. |
9619ce3 to
3b39604
Compare
|
Test stage Unit Test completed with status UNSTABLE. https://jenkins-3.daos.hpc.amslabs.hpecorp.net/job/daos-stack/job/daos//view/change-requests/job/PR-18671/4/testReport/ |
|
Test stage Unit Test with memcheck completed with status UNSTABLE. https://jenkins-3.daos.hpc.amslabs.hpecorp.net/job/daos-stack/job/daos//view/change-requests/job/PR-18671/4/testReport/ |
3b39604 to
7788fea
Compare
|
Test stage Functional Hardware Large 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-18671/4/execution/node/1773/log |
|
Test stage Functional Hardware Medium 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-18671/4/execution/node/1763/log |
PR#18141 (b36dd7b) introduced some regression: When the pool is physically full (ENOSPC), extending committed DTX table for punch/update commit may crash the whole engine with SIGABRT. That is because the backend TX logic (such as PMDK) will abort the TX by default if hit failure when allocation. Then subsequent operation (such as tx_add_ptr that is triggered by vos_dtx_extend_cmt_table()) against such aborted backend TX will trigger assertion inside backend TX logic. The patch replaces umem_zalloc() with umem_alloc_verb() for extending committed DTX table with new UMEM_FLAG_NO_ABORT flag that will notify backend TX logic to return ENOSPC without aborted related TX. Similar enhancement is also added for tx_add_ptr related logic. New unit tests (UMEM010/BMEM016/BMEM024) for that. Signed-off-by: Fan Yong <fan.yong@hpe.com> Co-authored-by: hgichon <hgichon@gmail.com>
7788fea to
feb6d69
Compare
| */ | ||
| int utest_check_mem_initial_status(struct utest_context *utx); | ||
|
|
||
| /** Check transaction failure with NO_ABROT flag |
There was a problem hiding this comment.
| /** Check transaction failure with NO_ABROT flag | |
| /** Check transaction failure with NO_ABORT flag |
|
Ping reviewers, thanks! |
|
Apologies for the very late confirmation on this — thank you for reworking the fix. I verified this patch (feb6d69) against the original DAOS-18690 scenario we hit during our project-quota work:
So this resolves the DTX-commit-under-ENOSPC engine crash for us, and the |
hgichon
left a comment
There was a problem hiding this comment.
Verified against the original DAOS-18690 scenario (UMEM010 NO_ABORT regression + full projid-quota regression, no engine abort) — see comment above. LGTM.
The reusing behavior is equal to (DTX) aggregating one committed DTX blob from victim container. So need to refresh relatred ::cd_newest_aggregated. Signed-off-by: Fan Yong <fan.yong@hpe.com>
|
Ping reviewers, thanks! |
|
This still needs a second approval before landing. |
Resolve merge conflict. Signed-off-by: Fan Yong <fan.yong@hpe.com>
PR#18141 (b36dd7b) introduced some regression:
When the pool is physically full (ENOSPC), extending committed DTX table for punch/update commit may crash the whole engine with SIGABRT. That is because the backend TX logic (such as PMDK) will abort the TX by default if hit failure when allocation. Then subsequent operation (such as tx_add_ptr that is triggered by vos_dtx_extend_cmt_table()) against such aborted backend TX will trigger assertion inside backend TX logic.
The patch replaces umem_zalloc() with umem_alloc_verb() for extending committed DTX table with new UMEM_FLAG_NO_ABORT flag that will notify backend TX logic to return ENOSPC without aborted related TX. Similar enhancement is also added for tx_add_ptr related logic.
New unit tests (UMEM010/BMEM016/BMEM024) for that.
Steps for the author:
After all prior steps are complete: