Skip to content

DAOS-19795 vos: resume recx enumeration at lowest overlap - #19328

Open
liuxuezhao wants to merge 1 commit into
release/2.8from
lxz/rb_enum_fix_28
Open

liuxuezhao wants to merge 1 commit into
release/2.8from
lxz/rb_enum_fix_28

Conversation

@liuxuezhao

Copy link
Copy Markdown
Contributor

A recx enumeration resumes from an anchor holding the first unpacked visible extent. evt_iter_probe_find() binary searches the visible extents with an overlap-only compare and returns whichever entry it hits first. If the anchor extent overlaps several entries (the tree was aggregated differently than when the anchor was taken, e.g. the anchor came from another replica, or aggregation above the enumeration epoch split the extent), the hit can be in the middle and the entries before it are silently skipped.

Slide to the lowest overlapping entry (highest for reverse iteration) before returning. Visible extents are disjoint and sorted, so the overlapping entries are contiguous.

Add VOS438 to reproduce the aggregation split case. Run it alone with:
PMEMOBJ_CONF=sds.at_create=0 vos_tests -S /dev/shm/vos -a -f VOS438

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).

A recx enumeration resumes from an anchor holding the first unpacked
visible extent. evt_iter_probe_find() binary searches the visible
extents with an overlap-only compare and returns whichever entry it
hits first. If the anchor extent overlaps several entries (the tree
was aggregated differently than when the anchor was taken, e.g. the
anchor came from another replica, or aggregation above the enumeration
epoch split the extent), the hit can be in the middle and the entries
before it are silently skipped.

Slide to the lowest overlapping entry (highest for reverse iteration)
before returning. Visible extents are disjoint and sorted, so the
overlapping entries are contiguous.

Add VOS438 to reproduce the aggregation split case. Run it alone with:
  PMEMOBJ_CONF=sds.at_create=0 vos_tests -S /dev/shm/vos -a -f VOS438

Signed-off-by: Xuezhao Liu <xuezhao.liu@hpe.com>
@liuxuezhao
liuxuezhao requested review from a team as code owners October 20, 2026 08:55
@github-actions

github-actions Bot commented Oct 20, 2026 •

Copy link
Copy Markdown

Ticket title is 'VOS recx enumerate possibly lost recx when race with vos aggregation'
Status is 'Open'
https://daosio.atlassian.net/browse/DAOS-19795

@github-actions github-actions Bot added the priority Ticket has high priority (automatically managed) label Oct 20, 2026
@liuxuezhao liuxuezhao changed the title DAOS-19616 vos: resume recx enumeration at lowest overlap DAOS-19795 vos: resume recx enumeration at lowest overlap Oct 20, 2026
@github-actions github-actions Bot removed the priority Ticket has high priority (automatically managed) label Oct 20, 2026
@liuxuezhao

Copy link
Copy Markdown
Contributor Author

all test cases passed, only with 3 NLT warning in drpc.c, such as
D_ALLOC(chunk_buf, chunk_len);if (chunk_buf == NULL) {      rc = -DER_NOMEM;      D_ERROR("failed to allocate buffer for chunk (idx=%lu, size=%lu): " DF_RCsend_chunked() failed to allocate buffer for chunk (idx=0, size=28): DER_NOMEM(-1009): 'Out of memory'Logging allocation failure

it should unrelated with this pR

This branch has not been deployed

No deployments
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.

3 participants