{"record":{"id":"6d1258d5cbf2059d","repo":"apache/seatunnel","slug":"should-never-happen-6d1258","errorCode":"SHOULD_NEVER_HAPPEN","errorMessage":"the table '%s.%s' cannot be found in table_list of job configuration.","messagePattern":"the table '(.+?)\\.(.+?)' cannot be found in table_list of job configuration\\.","errorType":"error_code","errorClass":"DorisConnectorException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-doris/src/main/java/org/apache/seatunnel/connectors/doris/source/reader/DorisSourceReader.java","lineNumber":83,"sourceCode":"    public void open() throws Exception {}\n\n    @Override\n    public void close() throws IOException {\n        if (valueReader != null) {\n            valueReader.close();\n        }\n    }\n\n    @Override\n    public void pollNext(Collector<SeaTunnelRow> output) throws Exception {\n        synchronized (output.getCheckpointLock()) {\n            DorisSourceSplit nextSplit = splitsQueue.poll();\n            if (nextSplit != null) {\n                PartitionDefinition partition = nextSplit.getPartitionDefinition();\n                DorisSourceTable dorisSourceTable =\n                        tables.get(TablePath.of(partition.getDatabase(), partition.getTable()));\n                if (dorisSourceTable == null) {\n                    throw new DorisConnectorException(\n                            DorisConnectorErrorCode.SHOULD_NEVER_HAPPEN,\n                            String.format(\n                                    \"the table '%s.%s' cannot be found in table_list of job configuration.\",\n                                    partition.getDatabase(), partition.getTable()));\n                }\n                valueReader = new DorisValueReader(partition, dorisSourceConfig, dorisSourceTable);\n                while (valueReader.hasNext()) {\n                    SeaTunnelRow record = valueReader.next();\n                    output.collect(record);\n                }\n            }\n            if (Boundedness.BOUNDED.equals(context.getBoundedness())\n                    && noMoreSplits\n                    && splitsQueue.isEmpty()) {\n                // signal to the source that we have reached the end of the data.\n                log.info(\"Closed the bounded Doris source\");\n                context.signalNoMoreElement();\n            }","sourceCodeStart":65,"sourceCodeEnd":101,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-doris/src/main/java/org/apache/seatunnel/connectors/doris/source/reader/DorisSourceReader.java#L65-L101","documentation":"During pollNext, a Doris source split references a database/table that is absent from the reader's tables map built from the job configuration's table_list. This is treated as an internal invariant violation: split enumeration and reader config are out of sync.","triggerScenarios":"A DorisSourceSplit whose PartitionDefinition database/table has no matching entry in tables (keyed by TablePath.of(database, table)) when the reader dequeues the next split.","commonSituations":"Job restored from a savepoint/checkpoint whose splits were enumerated with a different table_list than the current config; case-sensitive database/table name mismatches; dynamic table discovery changed between runs.","solutions":["Restore only from checkpoints/savepoints produced with the identical table_list configuration","Verify database/table names in table_list match case-sensitively what the splits reference","Re-run the job from scratch (no state) after fixing configuration","Check for version drift: savepoint generated by a different SeaTunnel/Doris connector version"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// before job start, verify table_list covers all expected tables\nassert jobConfig.tableList.stream().map(t -> t.database + \".\" + t.table)\n    .collect(Collectors.toSet()).contains(db + \".\" + table);","typeGuard":null,"tryCatchPattern":"try { reader.pollNext(); } catch (DorisConnectorException e) { if (e.getMessage().contains(\"cannot be found in table_list\")) { LOG.error(\"restore-state config mismatch; restart job without state or fix table_list\"); } throw e; }","preventionTips":["Never change table_list between savepoint and restore","Keep table name casing identical across configs","Avoid mixing splits from older state with new configs"],"tags":["doris","source","state-mismatch","config"],"backgroundTag":"resource-not-found","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"}