{"record":{"id":"dd593c061a8cfa19","repo":"apache/seatunnel","slug":"commonerrorcodedeprecated-unsupported-operation-dd593c","errorCode":"CommonErrorCodeDeprecated.UNSUPPORTED_OPERATION","errorMessage":"Unsupported handleSplitRequest: %d","messagePattern":"Unsupported handleSplitRequest: (.+?)","errorType":"error_code","errorClass":"IotdbConnectorException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-iotdb-v2/src/main/java/org/apache/seatunnel/connectors/seatunnel/iotdbv2/source/IoTDBv2SourceSplitEnumerator.java","lineNumber":285,"sourceCode":"    }\n\n    private static int getSplitOwner(int currentAssignCount, int numReaders) {\n        return currentAssignCount % numReaders;\n    }\n\n    @Override\n    public void notifyCheckpointComplete(long checkpointId) {\n        // nothing to do\n    }\n\n    @Override\n    public void close() {\n        // nothing to do\n    }\n\n    @Override\n    public void handleSplitRequest(int subtaskId) {\n        throw new IotdbConnectorException(\n                CommonErrorCodeDeprecated.UNSUPPORTED_OPERATION,\n                String.format(\"Unsupported handleSplitRequest: %d\", subtaskId));\n    }\n}\n","sourceCodeStart":267,"sourceCodeEnd":290,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-iotdb-v2/src/main/java/org/apache/seatunnel/connectors/seatunnel/iotdbv2/source/IoTDBv2SourceSplitEnumerator.java#L267-L290","documentation":"Thrown by handleSplitRequest when a reader asks the split enumerator to assign a split on demand. This enumerator assigns splits proactively (push-based) and does not support reader-initiated requests, so any such request is an unsupported operation and fails fast with the subtaskId in the message.","triggerScenarios":"A SeaTunnel reader calls handleSplitRequest(subtaskId) — typically when the reader has no splits and requests more — against this enumerator that never supports dynamic split requests.","commonSituations":"Custom/modified reader code requesting splits; engine behavior changes triggering dynamic split requests; misconfigured parallelism causing idle readers to request splits.","solutions":["Don't call handleSplitRequest against IoTDB source; rely on the enumerator's proactive assignment","If you see this from stock readers, check SeaTunnel/IoTDB connector version compatibility and upgrade the connector","Adjust source parallelism so reader count matches split count and readers don't need to request more splits","If implementing custom logic, override/handle splits via the assignment callback instead"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"// reader side\ntry {\n    context.sendSplitRequest();\n} catch (IotdbConnectorException e) {\n    if (e.getSeaTunnelErrorCode().equals(CommonErrorCodeDeprecated.UNSUPPORTED_OPERATION)) {\n        // this enumerator assigns splits proactively; wait for assigned splits instead\n    } else {\n        throw e;\n    }\n}","preventionTips":["Use the IoTDB source as designed: splits arrive via assignment, not on-demand requests","Keep source_parallelism aligned with the number of generated splits","Keep connector and engine versions compatible","If customizing readers, never assume handleSplitRequest is supported by every enumerator"],"tags":["iotdb","split-assignment","unsupported-operation","source"],"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"}