apache/seatunnel · error · KuduConnectorException

UNSUPPORTED_OPERATION

UNSUPPORTED_OPERATION

Error message

Unsupported handleSplitRequest: %d

What it means

KuduSourceSplitEnumerator.handleSplitRequest is an intentionally unsupported operation: in SeaTunnel's SourceSplitEnumerator contract, readers may optionally request splits, but this enumerator only pushes splits and does not serve on-demand requests. It throws CommonErrorCodeDeprecated.UNSUPPORTED_OPERATION formatted with the requesting subtask id.

Source

Thrown at seatunnel-connectors-v2/connector-kudu/src/main/java/org/apache/seatunnel/connectors/seatunnel/kudu/source/KuduSourceSplitEnumerator.java:202

        }
    }

    private void addPendingSplit(Collection<KuduSourceSplit> splits, int ownerReader) {
        pendingSplits.computeIfAbsent(ownerReader, r -> new ArrayList<>()).addAll(splits);
    }

    private int getSplitOwner(int currentAssignCount, int numReaders) {
        return currentAssignCount % numReaders;
    }

    @Override
    public int currentUnassignedSplitSize() {
        return pendingSplits.size();
    }

    @Override
    public void handleSplitRequest(int subtaskId) {
        throw new KuduConnectorException(
                CommonErrorCodeDeprecated.UNSUPPORTED_OPERATION,
                String.format("Unsupported handleSplitRequest: %d", subtaskId));
    }

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

    @Override
    public KuduSourceState snapshotState(long checkpointId) throws Exception {
        synchronized (stateLock) {
            return new KuduSourceState(
                    new ArrayList<>(pendingTables),
                    new HashMap<>(pendingSplits),

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Do not call handleSplitRequest with this enumerator; splits are pushed automatically by the framework
  2. Ensure the SourceReader uses the default push-based split assignment (restore/reader registration triggers assignment)
  3. If you need request-based assignment, modify the enumerator to implement request handling instead of throwing

Example fix

// before
reader.sendSplitRequest();
// after: rely on push model - just register and wait
context.registeredReaders(); // enumerator assigns splits automatically
Defensive patterns

Strategy: validation

Validate before calling

if (enumerator instanceof KuduSourceSplitEnumerator) {
    // never call handleSplitRequest; splits are pushed automatically
}

Try / catch

try {
    enumerator.handleSplitRequest(subtaskId);
} catch (KuduConnectorException e) {
    // do not issue split requests against push-based enumerators
}

Prevention

When it happens

Trigger: A source reader calls handleSplitRequest(subtaskId) on the Kudu split enumerator; normally only happens if the SourceReader's split-request mode is enabled or a custom/modified reader issues a request.

Common situations: Running a reader implementation that assumes on-demand split assignment; custom modifications to the kudu connector where the reader sends split requests; framework changes making readers request splits by default.

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/d7ce1851c414cdb3. Report an issue: GitHub.