Conversation
A regular fetch returns the visible part of each extent: its bio_iov starts at en_sel_ext.ex_lo, so save_csum() drops, with evt_entry_csum_update(), the checksums of the leading chunks hidden by newer extents or lying before the fetched range, to keep the checksum info aligned with the data verified by ds_csum_add2iod(). A csum-only fetch (VOS_OF_FETCH_CSUM) returns no data: akey_fetch_recx() records the whole physical extent (en_ext) in the recx list while save_csum() still trimmed its checksum info to the visible part. The two lists, meant to be read side by side, then disagreed on the number of chunks whenever the leading chunk(s) of an extent were hidden, and the checksums of those chunks could not be retrieved at all. Keep the checksum info whole in csum-only fetch mode, so that the recx list entry and the checksum info entry of an extent both describe the same physical extent, one checksum per chunk. Document the contract of VOS_OF_FETCH_CSUM and add the VOS401.3 test covering the three layouts that hide the leading chunk(s) of an extent: leading overwrite, fetch range starting inside the extent, and middle overwrite splitting the extent in two visible parts. Features: checksum Signed-off-by: Cedric Koch-Hofer <cedric.koch-hofer@hpe.com>
|
Ticket title is 'vos: VOS_OF_FETCH_CSUM reports a trimmed checksum for a partially visible extent' |
|
Test stage Functional Hardware Medium 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-19057/1/testReport/ |
Nasf-Fan
left a comment
There was a problem hiding this comment.
Generally, the patch looks fine for me. Just wondering whether the new test case will be run during CI test for the PR by default? I did not find related logs in the CI result.
|
|
||
| arg = *state; | ||
|
|
||
| vts_key_gen(&dkey_name[0], arg->dkey_size, true, arg); |
There was a problem hiding this comment.
D_ASSERT(UPDATE_DKEY_SIZE >= arg->dkey_size);
@Nasf-Fan , from my understanding all the unit tests are running by default: the recovery tag is specific for the functional test. |
…/daos-19629/patch-001
Replace the equality checks added to io_csum_fetch_recx_partial() with bound checks (arg->dkey_size <= UPDATE_DKEY_SIZE, arg->akey_size <= UPDATE_AKEY_SIZE). The test group also runs under the DAOS_OT_DKEY_UINT64/DAOS_OT_AKEY_UINT64 otype variants, where dkey_size/akey_size are set to sizeof(uint64_t) instead of UPDATE_DKEY_SIZE/UPDATE_AKEY_SIZE, so the equality asserts would abort in those configurations. Signed-off-by: Cedric Koch-Hofer <cedric.koch-hofer@hpe.com>
|
Thanks! It seems we did not collect logs for successful test cases. |
…/daos-19629/patch-001 Features: checksum
|
Test stage Functional Hardware Medium 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-19057/3/testReport/ |
|
The last CI Build #3 failure is unrelated to this PR. It failed with a functional test of the pool-service/OSA code which have no relation with this PR which only touches VOS checksum handling for After some investigation, this failure should be related to the ticket DAOS-19589 which seems to not have fully fix the regression introduced by the the ticket DAOS-19087. More details could be found in the JIRA comment of the ticket DAOS-19589. |
|
According to my investigation of the last CI failure (see #19057 (comment)), could you lend this PR with the following message:
|
Description
A regular fetch returns the visible part of each extent: its bio_iov starts at en_sel_ext.ex_lo, so save_csum() drops, with evt_entry_csum_update(), the checksums of the leading chunks hidden by newer extents or lying before the fetched range, to keep the checksum info aligned with the data verified by ds_csum_add2iod().
A csum-only fetch (VOS_OF_FETCH_CSUM) returns no data: akey_fetch_recx() records the whole physical extent (en_ext) in the recx list while save_csum() still trimmed its checksum info to the visible part. The two lists, meant to be read side by side, then disagreed on the number of chunks whenever the leading chunk(s) of an extent were hidden, and the checksums of those chunks could not be retrieved at all.
Keep the checksum info whole in csum-only fetch mode, so that the recx list entry and the checksum info entry of an extent both describe the same physical extent, one checksum per chunk. Document the contract of VOS_OF_FETCH_CSUM and add the VOS401.3 test covering the three layouts that hide the leading chunk(s) of an extent: leading overwrite, fetch range starting inside the extent, and middle overwrite splitting the extent in two visible parts.
Steps for the author:
After all prior steps are complete: