{"record":{"id":"2c357522fff5b2ed","repo":"apache/seatunnel","slug":"multi-table-sink-can-not-write-table","errorCode":null,"errorMessage":"multi table sink can not write table: ","messagePattern":"multi table sink can not write table: ","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"seatunnel-api/src/main/java/org/apache/seatunnel/api/sink/multitablesink/MultiTableSinkWriter.java","lineNumber":614,"sourceCode":"        if (failurePolicy.continueOtherTables() && isTableFailed(tableId)) {\n            log.debug(\"Skip row for quarantined table {}\", tableId);\n            return;\n        }\n        Optional<Integer> primaryKey = tableId == null ? null : sinkPrimaryKeys.get(tableId);\n        if ((primaryKey == null && sinkPrimaryKeys.size() == 1)\n                || (primaryKey != null && !primaryKey.isPresent())) {\n            int index = random.nextInt(blockingQueues.size());\n            offerRowElement(index, element);\n        } else if (primaryKey == null) {\n            if (failurePolicy.continueOtherTables()) {\n                handleTableFailure(\n                        tableId,\n                        MultiTableFailurePhase.RUNTIME_WRITE,\n                        new IllegalStateException(\n                                \"No active sink writer found for table \" + tableId));\n                return;\n            }\n            throw new RuntimeException(\"multi table sink can not write table: \" + tableId);\n        } else {\n            Object object = element.getField(primaryKey.get());\n            int index = 0;\n            if (object != null) {\n                index = Math.abs(object.hashCode()) % blockingQueues.size();\n            }\n            offerRowElement(index, element);\n        }\n    }\n\n    /**\n     * Starts the queue workers exactly once before the first ordered request enters the queues.\n     * Schema changes must share the same bootstrap path as row writes so the first DDL cannot\n     * bypass the in-band barrier while another thread is still bringing workers online.\n     */\n    private synchronized void ensureQueueWorkersSubmitted() {\n        if (submitted) {\n            return;","sourceCodeStart":596,"sourceCodeEnd":632,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-api/src/main/java/org/apache/seatunnel/api/sink/multitablesink/MultiTableSinkWriter.java#L596-L632","documentation":"Thrown in MultiTableSinkWriter.write when a row cannot be routed to any writer queue for its table — typically the table's writer has failed and, under the active failure policy, no healthy queue remains to accept the row.","triggerScenarios":"Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/sink/multitablesink/MultiTableSinkWriter.java:614 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Fix the root sink error reported earlier for that table via the failure policy","Use a failure policy with continueOtherTables so the failed table is quarantined while healthy tables keep writing","Verify the row's tableId matches a configured sink table"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}