apache/seatunnel · error · TypesenseConnectorException

UNSUPPORTED_OPERATION

UNSUPPORTED_OPERATION

Error message

Unsupported handleSplitRequest: 

What it means

TypesenseSourceSplitEnumerator eagerly assigns splits and does not support readers requesting splits on demand. When a reader sends a SplitRequest (subtaskId), handleSplitRequest throws TypesenseConnectorException(UNSUPPORTED_OPERATION, "Unsupported handleSplitRequest: " + subtaskId).

Source

Thrown at seatunnel-connectors-v2/connector-typesense/src/main/java/org/apache/seatunnel/connectors/seatunnel/typesense/source/TypesenseSourceSplitEnumerator.java:185

            if (context.registeredReaders().contains(subtaskId)) {
                assignSplit(Collections.singletonList(subtaskId));
            } else {
                log.warn(
                        "Reader {} is not registered. Pending splits {} are not assigned.",
                        subtaskId,
                        splits);
            }
        }
    }

    @Override
    public int currentUnassignedSplitSize() {
        return pendingSplit.values().stream().mapToInt(List::size).sum();
    }

    @Override
    public void handleSplitRequest(int subtaskId) {
        throw new TypesenseConnectorException(
                CommonErrorCodeDeprecated.UNSUPPORTED_OPERATION,
                "Unsupported handleSplitRequest: " + subtaskId);
    }

    @Override
    public void registerReader(int subtaskId) {
        log.debug("Register reader {} to TypesenseSourceSplitEnumerator.", subtaskId);
        if (!pendingSplit.isEmpty()) {
            assignSplit(Collections.singletonList(subtaskId));
        }
    }

    @Override
    public TypesenseSourceState snapshotState(long checkpointId) throws Exception {
        synchronized (stateLock) {
            return new TypesenseSourceState(shouldEnumerate, pendingSplit, assignCount.get());
        }
    }

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Avoid triggering on-demand split requests; rely on the enumerator's initial broadcast assignment (registerReader path).
  2. Check for engine/version-specific behavior where readers request splits and patch handleSplitRequest to return/ignore gracefully instead of throwing.
  3. Reduce or adjust source parallelism so all readers are assigned splits at startup and none need to request more.

Example fix

// before
@Override
public void handleSplitRequest(int subtaskId) {
    throw new TypesenseConnectorException(..., "Unsupported handleSplitRequest: " + subtaskId);
}
// after
@Override
public void handleSplitRequest(int subtaskId) {
    // push-based assignment only; ignore stray requests
    log.warn("Ignoring split request from subtask {}", subtaskId);
}
Defensive patterns

Strategy: fallback

Try / catch

try {
    enumerator.handleSplitRequest(subtaskId);
} catch (TypesenseConnectorException e) {
    // push-based enumerator: treat request as no-op and wait for assignment
}

Prevention

When it happens

Trigger: A source reader sends a split request to the enumerator — typically when the reader has no split yet and requests one per protocol — instead of waiting for the enumerator's push-based assignment.

Common situations: Running with a parallelism where a reader finishes/starts and requests a split; engine recovery paths that trigger split requests; mismatch between enumerator assignment strategy and reader behavior after a checkpoint restore.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


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