DAOS-18690 vos: handle DTX commit under space pressure - b28#18280
DAOS-18690 vos: handle DTX commit under space pressure - b28#18280Nasf-Fan wants to merge 1 commit into
Conversation
|
Ticket title is 'Aurora daos_user: SCM single target ran out of space (min:0 B) and not able to finish GC. ' |
|
Test stage Functional Hardware Medium Verbs Provider MD on SSD completed with status UNSTABLE. https://jenkins-3.daos.hpc.amslabs.hpecorp.net/job/daos-stack/job/daos//view/change-requests/job/PR-18280/1/testReport/ |
a9b514b to
e153041
Compare
|
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-18280/2/execution/node/1370/log |
|
Test stage Functional Hardware Medium Verbs Provider MD on SSD completed with status UNSTABLE. https://jenkins-3.daos.hpc.amslabs.hpecorp.net/job/daos-stack/job/daos//view/change-requests/job/PR-18280/2/testReport/ |
e153041 to
3dca5b8
Compare
|
Is this a (clean) cherry pick of b36dd7b ? |
No, we added more in src/tests/suite/daos_base_tx.c for 2.8 version. The other parts are the same. |
knard38
left a comment
There was a problem hiding this comment.
Nothing blocking, just ask more details on code change that I am not sure to understand.
| print_message("Filling DTX committed table for the container " DF_UUID "\n", | ||
| DP_UUID(conts[m].uuid)); | ||
|
|
||
| for (n = '0'; n < '8'; n++) { |
There was a problem hiding this comment.
The master branch (i.e. PR #18141) uses '4' here — doubling to '8' on the backport roughly doubles the number of committed DTX entries written during the fill phase. Could you clarify whether this increase is needed because the DTX committed-table threshold or fill rate differs on release/2.8, or whether it reflects a genuine test reliability fix that should also be applied to master?
Either way, replacing the magic '8' (and the '4' on master) with a named constant and/or a short comment explaining the target fill level would help future readers understand why this specific count was chosen.
There was a problem hiding this comment.
Thanks for the careful thinking.
During CI test, we found that sometimes, some VOS target had never been written before we injecting fail_loc (DAOS_DTX_NOSPACE_NOREFRESH) to simulate space pressure, as to the committed DTX table on related container shard was empty.
Unfortunately, the subsequent write after fail_loc injection (to simulate space pressure) maybe sent to such VOS target, but because of no committed DTX blob can be reused under space pressure (since the table was empty), then related test failed.
So here, we write more dkeys to generate more transactions on more redundancy groups to avoid empty committed DTX table on all VOS targets. In fact, even if we generated more dkeys, it is still not 100% guaranteed that all container shards can be written. That depends on object layout algorithm, the test targets count, related objects' ID and keys. As you may know, we have ever found some object layout imbalance issue this year and Liang fixed it. On some degree, such issue maybe not completely resolved. Means that it is still possible to hit object shard unbalance issue under some cases.
So replacing original '4' with '8' is just empiric value for test purpose. In the future, we need more controllable test mechanism instead of current full write coverage of all VOS targets.
There was a problem hiding this comment.
Thanks for the detailed explanation
| snprintf(akey, TSIZE, "akey-%c", i); | ||
| for (j = 'a'; j <= 'm'; j++) { | ||
| memset(wbuf, j, TSIZE); | ||
| insert_single(dkey, akey, (j - 'a') * TSIZE, wbuf, TSIZE, |
There was a problem hiding this comment.
It is not obvious which key is used here as it is the result of the first initialisation loop of the function.
Could help readability to explicitly define the key value to use?
There was a problem hiding this comment.
The dkey is the last one that is used in former loop when prepare committed DTX table before fail_loc (DAOS_DTX_NOSPACE_NOREFRESH) injected. In fact, any dkey can be used here, that is no matter. Because the subsequent lookup_single() always use the same dkey for verification.
| for (m = 0; m < CONTS; m++) { | ||
| ioreq_fini(&reqs[m]); | ||
| oids[m] = daos_test_oid_gen(conts[m].coh, OC_RP_3G1, 0, 0, arg->myrank); | ||
| ioreq_init(&reqs[m], conts[m].coh, oids[m], DAOS_IOD_ARRAY, arg); | ||
| } |
There was a problem hiding this comment.
Not sure to understand why this new code is needed and if it should also be changed in the master branch?
A little comment could be helpful ?
There was a problem hiding this comment.
We use OC_RP_3GX to prepare committed DTX table on all VOS targets. Then inject DAOS_DTX_NOSPACE_NOREFRESH to simulate space pressure for subsequent DTX commit operation. And then we use OC_RP_3G1 to generate more transactions. Because 3G1 will make transactions to be located on single redundancy group, means that the transactions are more centralized, then more easy to trigger DTX committed blob allocation (for related logic verification).
I plan to port the changes (include above ones) to master when hit related test failure on some master PR.
|
Ping @gnailzenh , thanks! |
|
Will need to wait for merge approval for 2.8.1 |
3dca5b8 to
c74033e
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-18280/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-18280/4/testReport/ |
If we cannot normally allocate space to hold committed DTX table, then release some old DTX entries from some container in the same pool to hold new committed ones. The patch also uses preallocated space for TX snapshots under the case of space pressure. Signed-off-by: Fan Yong <fan.yong@hpe.com> Co-authored-by: hgichon <hgichon@gmail.com>
c74033e to
bf2d2a3
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-18280/5/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-18280/5/testReport/ |
If we cannot normally allocate space to hold committed DTX table, then release some old DTX entries from some container in the same pool to hold new committed ones.
The patch also uses preallocated space for TX snapshots under the case of space pressure.
Steps for the author:
After all prior steps are complete: