{"record":{"id":"fd08f8903d2dd3a9","repo":"apache/seatunnel","slug":"unsupported-operation-fd08f8","errorCode":"UNSUPPORTED_OPERATION","errorMessage":"Unsupported handleSplitRequest: %d","messagePattern":"Unsupported handleSplitRequest: (.+?)","errorType":"error_code","errorClass":"DorisConnectorException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-doris/src/main/java/org/apache/seatunnel/connectors/doris/source/split/DorisSourceSplitEnumerator.java","lineNumber":129,"sourceCode":"            if (context.registeredReaders().contains(subtaskId)) {\n                assignSplit(Collections.singletonList(subtaskId));\n            } else {\n                log.warn(\n                        \"Reader {} is not registered. Pending splits {} are not assigned.\",\n                        subtaskId,\n                        splits);\n            }\n        }\n    }\n\n    @Override\n    public int currentUnassignedSplitSize() {\n        return this.pendingSplit.size();\n    }\n\n    @Override\n    public void handleSplitRequest(int subtaskId) {\n        throw new DorisConnectorException(\n                CommonErrorCodeDeprecated.UNSUPPORTED_OPERATION,\n                String.format(\"Unsupported handleSplitRequest: %d\", subtaskId));\n    }\n\n    @Override\n    public void registerReader(int subtaskId) {\n        log.debug(\"Register reader {} to DorisSourceSplitEnumerator.\", subtaskId);\n        if (!pendingSplit.isEmpty()) {\n            assignSplit(Collections.singletonList(subtaskId));\n        }\n    }\n\n    @Override\n    public DorisSourceState snapshotState(long checkpointId) {\n        synchronized (stateLock) {\n            return new DorisSourceState(shouldEnumerate, pendingSplit);\n        }\n    }","sourceCodeStart":111,"sourceCodeEnd":147,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-doris/src/main/java/org/apache/seatunnel/connectors/doris/source/split/DorisSourceSplitEnumerator.java#L111-L147","documentation":"DorisSourceSplitEnumerator.handleSplitRequest is intentionally unsupported: this enumerator pushes splits to readers proactively (via assignSplit) and never serves on-demand requests. Any reader request triggers this exception with the requesting subtaskId.","triggerScenarios":"SourceReader calls context.sendSplitRequest() (e.g. because it ran out of splits and believes more may come) while registered with this enumerator.","commonSituations":"Custom source reader modifications requesting splits; framework-triggered requests after a reader finishes all assigned splits; misconfigured parallelism causing readers to starve and request splits.","solutions":["Do not call sendSplitRequest from readers consuming Doris source splits","Increase source parallelism or reduce reader count so splits are sufficient","If using stock code, upgrade — earlier versions had request-related regressions","Verify the checkpointed reader state isn't asking for reassignment after restore"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// in a custom reader: never call\n// context.sendSplitRequest(); with DorisSourceSplitEnumerator","typeGuard":null,"tryCatchPattern":"try { enumerator.handleSplitRequest(subtaskId); } catch (DorisConnectorException e) { LOG.warn(\"split requests unsupported; splits are pushed by the enumerator\"); }","preventionTips":["Use the stock DorisSourceReader which relies on pushed splits","Size parallelism to the number of splits","Avoid frameworks/patches that assume pull-based split assignment"],"tags":["doris","source","split-enumerator","unsupported"],"backgroundTag":"unsupported-operation","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"}