Skip to content

refactor: Introduce SpillState enum for memory-limited NLJ execution#21636

Open
viirya wants to merge 1 commit intoapache:mainfrom
viirya:nlj-memory-limited-state-enum
Open

refactor: Introduce SpillState enum for memory-limited NLJ execution#21636
viirya wants to merge 1 commit intoapache:mainfrom
viirya:nlj-memory-limited-state-enum

Conversation

@viirya
Copy link
Copy Markdown
Member

@viirya viirya commented Apr 15, 2026

Which issue does this PR close?

  • Closes #.

Rationale for this change

The current approach does use Option fields as implicit state flags (e.g., left_stream.is_some() to check if we're in memory-limited mode), which is fragile. This introduces a dedicated enum to make the execution state explicit.

What changes are included in this PR?

Replace scattered Option fields and boolean flags with a dedicated SpillState enum that explicitly tracks the fallback state:

  • Disabled: fallback not possible (unsupported join type or no disk)
  • Pending: fallback possible, holding left_plan and task_context for re-execution on OOM
  • Active: fallback triggered, holding all spill-related state (left_stream, reservation, spill_manager, etc.)

This makes the state transitions explicit and eliminates the implicit is_memory_limited() check based on Option::is_some().

Co-authored-by: Claude Code

Are these changes tested?

Existing tests

Are there any user-facing changes?

No

@github-actions github-actions bot added the physical-plan Changes to the physical-plan crate label Apr 15, 2026
@viirya viirya marked this pull request as draft April 15, 2026 02:54
@viirya viirya force-pushed the nlj-memory-limited-state-enum branch from 70862ee to 3a906a8 Compare April 15, 2026 02:55
Replace scattered Option fields and boolean flags with a dedicated
SpillState enum that explicitly tracks the fallback state:

- Disabled: fallback not possible (unsupported join type or no disk)
- Pending: fallback possible, holding left_plan and task_context
  for re-execution on OOM
- Active: fallback triggered, holding all spill-related state
  (left_stream, reservation, spill_manager, etc.)

This makes the state transitions explicit and eliminates the implicit
is_memory_limited() check based on Option::is_some().

Co-authored-by: Claude Code
@viirya viirya force-pushed the nlj-memory-limited-state-enum branch from 3a906a8 to dabe6dc Compare April 15, 2026 05:21
@viirya viirya marked this pull request as ready for review April 15, 2026 05:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

physical-plan Changes to the physical-plan crate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant