Skip to content

Fix EventPage.CalculateCeiling crash on fully-skipped batch (marten#4663)#416

Merged
jeremydmiller merged 1 commit into
mainfrom
fix-4663-eventpage-empty-ceiling
Jun 5, 2026
Merged

Fix EventPage.CalculateCeiling crash on fully-skipped batch (marten#4663)#416
jeremydmiller merged 1 commit into
mainfrom
fix-4663-eventpage-empty-ceiling

Conversation

@jeremydmiller

Copy link
Copy Markdown
Member

Problem

EventPage.CalculateCeiling calls this.Last().Sequence whenever (Count + skippedEvents) == batchSize. When error handling is configured to skip events (serialization/application/unknown event errors) and every event in a full batch is skipped, the page is empty (Count == 0) while Count + skippedEvents == batchSize. Last() then throws System.InvalidOperationException: Sequence contains no elements, crashing projection rebuilds.

Reported in JasperFx/marten#4663 (Marten v8.37.2, small batch sizes, event skipping, optimized rebuilds, HotCold daemon).

Fix

Guard the Last() access with && Count > 0. When the page is entirely skipped events, fall back to the high water mark so the daemon keeps making progress instead of throwing.

Tests

Added EventPageTests covering the full-page, not-full-page, and fully-skipped-batch (regression) cases. All pass on net9.0 and net10.0.

Fixes JasperFx/marten#4663

🤖 Generated with Claude Code

…page

When error handling is configured to skip events and every event in a full
batch is skipped, the EventPage is empty (Count == 0) while
Count + skippedEvents == batchSize. CalculateCeiling then called Last() on the
empty page and threw "Sequence contains no elements", crashing projection
rebuilds. Guard the Last() access with Count > 0 and fall back to the high
water mark so the daemon keeps making progress.

Fixes JasperFx/marten#4663

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.

System.InvalidOperationException at EventPage.CalculateCeiling

1 participant