{"record":{"id":"e44717b7980e356f","repo":"apache/seatunnel","slug":"unsupported-operation-e44717","errorCode":"UNSUPPORTED_OPERATION","errorMessage":"Unsupported handleSplitRequest: ","messagePattern":"Unsupported handleSplitRequest: ","errorType":"error_code","errorClass":"TypesenseConnectorException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-typesense/src/main/java/org/apache/seatunnel/connectors/seatunnel/typesense/source/TypesenseSourceSplitEnumerator.java","lineNumber":185,"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 pendingSplit.values().stream().mapToInt(List::size).sum();\n    }\n\n    @Override\n    public void handleSplitRequest(int subtaskId) {\n        throw new TypesenseConnectorException(\n                CommonErrorCodeDeprecated.UNSUPPORTED_OPERATION,\n                \"Unsupported handleSplitRequest: \" + subtaskId);\n    }\n\n    @Override\n    public void registerReader(int subtaskId) {\n        log.debug(\"Register reader {} to TypesenseSourceSplitEnumerator.\", subtaskId);\n        if (!pendingSplit.isEmpty()) {\n            assignSplit(Collections.singletonList(subtaskId));\n        }\n    }\n\n    @Override\n    public TypesenseSourceState snapshotState(long checkpointId) throws Exception {\n        synchronized (stateLock) {\n            return new TypesenseSourceState(shouldEnumerate, pendingSplit, assignCount.get());\n        }\n    }","sourceCodeStart":167,"sourceCodeEnd":203,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-typesense/src/main/java/org/apache/seatunnel/connectors/seatunnel/typesense/source/TypesenseSourceSplitEnumerator.java#L167-L203","documentation":"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).","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\n@Override\npublic void handleSplitRequest(int subtaskId) {\n    throw new TypesenseConnectorException(..., \"Unsupported handleSplitRequest: \" + subtaskId);\n}\n// after\n@Override\npublic void handleSplitRequest(int subtaskId) {\n    // push-based assignment only; ignore stray requests\n    log.warn(\"Ignoring split request from subtask {}\", subtaskId);\n}","handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n    enumerator.handleSplitRequest(subtaskId);\n} catch (TypesenseConnectorException e) {\n    // push-based enumerator: treat request as no-op and wait for assignment\n}","preventionTips":["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."],"tags":["typesense","source","split-assignment","unsupported-operation"],"backgroundTag":"method-not-implemented","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"}