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
- Do not call handleSplitRequest with this enumerator; splits are pushed automatically by the framework
- Ensure the SourceReader uses the default push-based split assignment (restore/reader registration triggers assignment)
- 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
- Rely on the framework's push-based split assignment for Kudu
- Do not enable request-based split assignment with the Kudu source
- Keep the SourceReader aligned with the enumerator's assignment model
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
- Unsupported handleSplitRequest: %d
- A decoding format must override this method to apply metadat
- Unsupported convert %s to %s
- Unsupported convert ${value.getClass()} to Float, typeDefine
- Unsupported convert ${value.getClass()} to Float
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/d7ce1851c414cdb3.
Report an issue: GitHub.