Skip to content

branch-4.1: [fix](fe) Fix INSERT INTO local TVF ignoring backend_id during scheduling #61732#61735

Open
github-actions[bot] wants to merge 1 commit intobranch-4.1from
auto-pick-61732-branch-4.1
Open

branch-4.1: [fix](fe) Fix INSERT INTO local TVF ignoring backend_id during scheduling #61732#61735
github-actions[bot] wants to merge 1 commit intobranch-4.1from
auto-pick-61732-branch-4.1

Conversation

@github-actions
Copy link
Contributor

Cherry-picked from #61732

…ling (#61732)

### What problem does this PR solve?

Followup #60719

Problem Summary: When using `INSERT INTO local("backend_id" = "X" ...)`,
the data should only be written to the BE node specified by
`backend_id`. However, the Coordinator schedules the sink fragment to an
arbitrary backend because the fragment uses `UNPARTITIONED` partition,
which causes `SimpleScheduler.getHost()` to pick any available BE. This
results in file creation failures when the target directory only exists
on the intended BE.

**Root Cause:**
- The read path (`SELECT FROM local(...)`) correctly handles this via
`TVFScanNode.initBackendPolicy()`, restricting the scan to the specified
backend.
- The write path (`INSERT INTO local(...)`) had no equivalent logic.
`PhysicalPlanTranslator.visitPhysicalTVFTableSink()` creates the
fragment as `UNPARTITIONED`, and `Coordinator.computeFragmentHosts()`
assigns it to a random BE.

**Fix:**
Added backend_id-aware scheduling in
`Coordinator.computeFragmentHosts()` for local `TVFTableSink`, forcing
the sink fragment to execute on the designated backend. This is
consistent with the existing `DictionarySink` pattern that also
overrides fragment scheduling for specific sink types.

**Changes:**
1. `TVFTableSink.java` - Added `getTvfName()` and `getBackendId()`
accessor methods
2. `Coordinator.java` - Added check before UNPARTITIONED scheduling: if
the sink is a local TVFTableSink with a specific backend_id, force the
fragment onto that backend
@github-actions github-actions bot requested a review from yiguolei as a code owner March 26, 2026 01:58
@morningman
Copy link
Contributor

run buildall

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.

1 participant