{"record":{"id":"f0c7ea11ff7d5b81","repo":"apache/seatunnel","slug":"does-not-support-split-requests-subtask","errorCode":null,"errorMessage":"Does not support split requests: subtask ","messagePattern":"Does not support split requests: subtask ","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-fluss/src/main/java/org/apache/seatunnel/connectors/seatunnel/fluss/source/FlussSourceSplitEnumerator.java","lineNumber":197,"sourceCode":"            if (splits == null || splits.isEmpty()) {\n                return;\n            }\n            splits.forEach(pendingSplits::remove);\n            pendingSplits.addAll(splits);\n            if (context.registeredReaders().contains(subtaskId)) {\n                assignSplits();\n            }\n        }\n    }\n\n    @Override\n    public int currentUnassignedSplitSize() {\n        return pendingSplits.size();\n    }\n\n    @Override\n    public void handleSplitRequest(int subtaskId) {\n        throw new UnsupportedOperationException(\n                \"Does not support split requests: subtask \" + subtaskId);\n    }\n\n    @Override\n    public void registerReader(int subtaskId) {\n        assignSplits();\n    }\n\n    @Override\n    public FlussSourceState snapshotState(long checkpointId) {\n        synchronized (lock) {\n            return new FlussSourceState(new HashSet<>(pendingSplits));\n        }\n    }\n\n    @Override\n    public void notifyCheckpointComplete(long checkpointId) {\n        // no-op: read positions are persisted in the split state","sourceCodeStart":179,"sourceCodeEnd":215,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-fluss/src/main/java/org/apache/seatunnel/connectors/seatunnel/fluss/source/FlussSourceSplitEnumerator.java#L179-L215","documentation":"FlussSourceSplitEnumerator.handleSplitRequest rejects the standard SourceReader 'request split' protocol: splits are pushed by the enumerator (assignSplits on registerReader) rather than granted on request. A reader that calls context.sendSplitRequest() causes this UnsupportedOperationException with the requesting subtask id.","triggerScenarios":"A FlussSourceReader (or restore path) invokes handleSplitRequest(subtaskId) — typically via ReaderContext.sendSplitRequest() when it finds itself idle and waiting for work — and the enumerator throws immediately.","commonSituations":"Custom reader modifications or an idle-reader callback triggering split requests against this enumerator; frameworks that assume request/response split assignment call the method during normal runtime.","solutions":["Remove any sendSplitRequest() calls from the reader or custom code; splits are assigned automatically on registerReader","If a reader is idle, verify assignSplits() logic covers all registered subtaskIds","Check for framework/translation layer behavior that requests splits and disable it for this source","Upgrade the connector, if a version adds request-based assignment"],"exampleFix":"// before (in reader)\nif (splits.isEmpty()) {\n  context.sendSplitRequest();\n}\n// after\nif (splits.isEmpty()) {\n  // wait: enumerator pushes splits in registerReader/assignSplits\n  Thread.sleep(100);\n}","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  enumerator.handleSplitRequest(subtaskId);\n} catch (UnsupportedOperationException e) {\n  // do not request splits from this source; rely on push-based assignment\n  LOG.debug(\"Fluss enumerator is push-only: {}\", e.getMessage());\n}","preventionTips":["Never call sendSplitRequest() from FlussSourceReader code","Remember Fluss split assignment is enumerator-push (assignSplits in registerReader)","Review custom reader logic for idle-split-request callbacks"],"tags":["unsupported-operation","split-assignment","fluss","enumerator"],"backgroundTag":"operation-not-supported","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}