Skip to content

[release/3.4] fix(history): reset page counter on recsplit collision retry in buildVI - #19697

Merged
AskAlexSharov merged 1 commit into
release/3.4from
cherry-pick-19695-to-release-3.4
Mar 6, 2026
Merged

AskAlexSharov merged 1 commit into
release/3.4from
cherry-pick-19695-to-release-3.4

Conversation

@sudeepdino008

Copy link
Copy Markdown
Member

Cherry-pick of #19695 to release/3.4


The counter 'i' used to track page offsets in paged history files was declared outside the retry loop. When a recsplit collision occurred and the loop retried, 'i' retained its value from the previous iteration, causing incorrect page offset tracking in the .vi index.

Fix: Move i := 0 inside the retry loop so it's reset on each attempt.

The counter 'i' used to track page offsets in paged history files was
declared outside the retry loop. When a recsplit collision occurred and
the loop retried, 'i' retained its value from the previous iteration,
causing incorrect page offset tracking in the .vi index.

Fix: Move 'i := 0' inside the retry loop so it's reset on each attempt.
@AskAlexSharov
AskAlexSharov merged commit 2163b47 into release/3.4 Mar 6, 2026
22 checks passed
@AskAlexSharov
AskAlexSharov deleted the cherry-pick-19695-to-release-3.4 branch March 6, 2026 15:59
Giulio2002 pushed a commit that referenced this pull request Mar 6, 2026
UnitTest for #19697 - maybe can
simplify in future (by passing external recsplit cfg)
sudeepdino008 added a commit that referenced this pull request Mar 9, 2026
The variable 'keyPos' used to track key offsets in accessor files was
declared outside the retry loop. When a recsplit collision occurred and
the loop retried, 'keyPos' retained its value from the previous iteration,
causing incorrect key offset tracking in the index.

Fix: Move keyPos initialization inside the retry loop so it's reset on
each attempt.

Similar to the fix in history.go (PR #19697).
sudeepdino008 added a commit that referenced this pull request Mar 9, 2026
…ain.go

Same bug pattern as PR #19697 (history.go buildVI page counter).

When buildHashMapAccessor encounters a recsplit collision and retries,
keyPos and valPos must be reset to 0. Previously they were declared
outside the retry loop, causing incorrect offsets in the .kvi index
on retry.

Also cherry-picks test infrastructure from release/3.4 (PR #19698):
- ForceCollisionOnce() method in recsplit for testing
- _testBuildVIHook in history.go
- TestHistoryBuildVI_PageCounterResetOnCollisionRetry

Adds TestDomain_KeyPosResetOnCollisionRetry to verify the fix.
sudeepdino008 pushed a commit that referenced this pull request Mar 9, 2026
UnitTest for #19697 - maybe can
simplify in future (by passing external recsplit cfg)
AskAlexSharov pushed a commit that referenced this pull request Mar 10, 2026
…ain.go (#19752)

## Summary

Same bug pattern as PR #19697 (history.go buildVI page counter).

When `buildHashMapAccessor` encounters a recsplit collision and retries,
`keyPos` and `valPos` must be reset to 0. Previously they were declared
outside the retry loop, causing incorrect offsets in the .kvi index on
retry.

## Changes

- **db/state/domain.go**: Move `keyPos` and `valPos` declarations inside
the retry loop
- **db/state/domain_test.go**: Add
`TestDomain_KeyPosResetOnCollisionRetry` to verify the fix
- Cherry-pick test infrastructure from release/3.4 (PR #19698):
  - `ForceCollisionOnce()` method in recsplit for testing
  - `_testBuildVIHook` in history.go  
  - `TestHistoryBuildVI_PageCounterResetOnCollisionRetry`

## Related

- PR #19697: Fixed same bug in history.go buildVI
- PR #19698: Test infrastructure for collision retry testing
(release/3.4)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants