Skip to content

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

Merged
gnailzenh merged 1 commit into
masterfrom
lxz/rb_enum_fix
Oct 22, 2026
Merged

gnailzenh merged 1 commit into
masterfrom
lxz/rb_enum_fix

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 09:01
@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

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

@gnailzenh
gnailzenh merged commit f98e442 into master Oct 22, 2026
43 of 45 checks passed
@gnailzenh
gnailzenh deleted the lxz/rb_enum_fix branch October 22, 2026 06:48
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.

4 participants