apache/seatunnel · error

source register failed.

Error message

source register failed.

What it means

In SourceFlowLifeCycle.register(), a source reader asynchronously registers itself with its split enumerator via SourceRegisterOperation sent to the enumerator's member address. If the send/future is interrupted or fails, the warning is logged and a RuntimeException is thrown, failing the reader's open. Without registration the enumerator never learns about this reader, so split assignment cannot proceed.

Solutions

  1. Retry the job — transient races between reader and enumerator startup usually resolve on restart.
  2. Check cluster member connectivity and that the enumerator task did not fail (look for earlier enumerator errors in the log).
  3. Increase startup-related timeouts if the enumerator is slow to initialize (large split enumeration).
  4. If persistent, verify the connector's enumerator doesn't crash on init (bad source config, unreachable source system).
Defensive patterns

Strategy: retry

Validate before calling

null

Type guard

null

Try / catch

try {
    sourceFlowLifeCycle.register();
} catch (RuntimeException e) {
    // retry once; registration races with enumerator startup are usually transient
    retryWithBackoff(() -> sourceFlowLifeCycle.register(), 2);
}

Prevention

When it happens

Trigger: sendToMember(...).get() throws InterruptedException (task interrupted) or ExecutionException (remote operation failed: enumerator task not yet running, member unreachable, operation rejected).

Common situations: Enumerator task startup slower than reader startup (race on job start); network instability between Zeta cluster members; enumerator task failed/restarted while readers open; job cancellation interrupting the registration wait.

Understand the failure class

Background: Request timed out: what client-side request timeouts mean across libraries (Request timed out, TIMED_OUT, APITimeoutError) — this error's family across 39 libraries.

Related errors


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/39b2150e6053b840. Report an issue: GitHub.

Appendix: source

Thrown at seatunnel-engine/seatunnel-engine-server/src/main/java/org/apache/seatunnel/engine/server/task/flow/SourceFlowLifeCycle.java:363

    /**
     * Registers this reader with the remote split enumerator.
     *
     * <p>Sends a {@link SourceRegisterOperation} to the enumerator at the previously resolved
     * address, informing it that this reader subtask is ready to receive splits.
     *
     * @throws RuntimeException if registration fails due to communication errors
     */
    private void register() {
        try {
            runningTask
                    .getExecutionContext()
                    .sendToMember(
                            new SourceRegisterOperation(
                                    currentTaskLocation, enumeratorTaskLocation),
                            enumeratorTaskAddress)
                    .get();
        } catch (InterruptedException | ExecutionException e) {
            log.warn("source register failed.", e);
            throw new RuntimeException(e);
        }
    }

    private void startFlushTimer() {
        if (flushIntervalMs <= 0) {
            return;
        }
        flushFuture =
                runningTask
                        .getExecutionContext()
                        .getTaskExecutionService()
                        .registerTimerFlushTask(
                                currentTaskLocation, this::onTimerTick, flushIntervalMs);
        log.info(
                "Registered flush timer for source task {}, intervalMs={}",
                currentTaskLocation,
                flushIntervalMs);

View on GitHub (pinned to cf67b549a7)