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
- Avoid triggering on-demand split requests; rely on the enumerator's initial broadcast assignment (registerReader path).
- Check for engine/version-specific behavior where readers request splits and patch handleSplitRequest to return/ignore gracefully instead of throwing.
- 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
- Rely on the enumerator's push-based split assignment; do not send on-demand SplitRequests.
- Match source parallelism to the number of enumerated splits so no reader needs to request more.
- Patch handleSplitRequest to log-and-ignore for engine versions that send requests.
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
- CommonErrorCodeDeprecated.UNSUPPORTED_OPERATION
- The single-split reader don't support reading multiple split
- OPERATION_NOT_SUPPORTED
- Does not support split requests: subtask
- UNSUPPORTED_OPERATION
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/e44717b7980e356f.
Report an issue: GitHub.