{"record":{"id":"a86c9e6c38f5ef74","repo":"apache/seatunnel","slug":"reader-is-not-registered-pending-splits-are-a86c9e","errorCode":null,"errorMessage":"Reader {} is not registered. Pending splits {} are not assigned.","messagePattern":"Reader (.+?) is not registered\\. Pending splits (.+?) are not assigned\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"seatunnel-connectors-v2/connector-easysearch/src/main/java/org/apache/seatunnel/connectors/seatunnel/easysearch/source/EasysearchSourceSplitEnumerator.java","lineNumber":189,"sourceCode":"                                    scrollTime,\n                                    scrollSize)));\n        }\n        return splits;\n    }\n\n    @Override\n    public void close() throws IOException {\n        ezsClient.close();\n    }\n\n    @Override\n    public void addSplitsBack(List<EasysearchSourceSplit> splits, int subtaskId) {\n        if (!splits.isEmpty()) {\n            addPendingSplit(splits, subtaskId);\n            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 EasysearchConnectorException(\n                UNSUPPORTED_OPERATION, \"Unsupported handleSplitRequest: \" + subtaskId);\n    }\n","sourceCodeStart":171,"sourceCodeEnd":207,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-easysearch/src/main/java/org/apache/seatunnel/connectors/seatunnel/easysearch/source/EasysearchSourceSplitEnumerator.java#L171-L207","documentation":"A WARN logged by EasysearchSourceSplitEnumerator.addSplitsBack when failed splits are returned for a subtaskId whose reader is not currently registered with the split enumerator context. The splits are stored as pending and will only be assigned once the reader re-registers; until then they sit unassigned.","triggerScenarios":"Calling addSplitsBack (e.g. on reader failure/rollback) with a subtaskId not present in context.registeredReaders() — typically when the reader already failed permanently or the failure notification races with split return.","commonSituations":"Reader task crashed and was not yet restarted/re-registered when its splits came back; engine checkpoint recovery races; duplicated addSplitsBack calls after a reader failure.","solutions":["Confirm the reader eventually restarts and re-registers — pending splits are then assigned automatically.","Check the reader's failure logs for the root cause of the un-registration.","If splits stay pending indefinitely, restart the job from the last checkpoint.","Ensure the engine's recovery settings (restarting strategy) are enabled so readers re-register after failure."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"if (!context.registeredReaders().contains(subtaskId)) {\n    log.warn(\"reader {} not registered; splits kept pending\", subtaskId);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Enable a restarting strategy so failed readers re-register","Investigate reader failure root causes promptly","Restart from checkpoint if pending splits never drain"],"tags":["split-enumerator","source-reader","recovery","easysearch"],"backgroundTag":"invalid-state-transition","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}