{"record":{"id":"680355dcc5b18d94","repo":"apache/seatunnel","slug":"failed-to-broadcast-flushsignal-from-task","errorCode":null,"errorMessage":"Failed to broadcast FlushSignal from task {}","messagePattern":"Failed to broadcast FlushSignal from task (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"seatunnel-engine/seatunnel-engine-server/src/main/java/org/apache/seatunnel/engine/server/task/flow/SourceFlowLifeCycle.java","lineNumber":203,"sourceCode":"        register();\n    }\n\n    /**\n     * Timer callback invoked by the {@code timerFlushWorker} thread pool.\n     *\n     * <p>Acquires the {@code checkpointLock} (the same monitor that {@link #triggerBarrier} uses)\n     * so that flush signals and barriers are strictly serialized — a FlushSignal either completes\n     * entirely before a Barrier or queues behind it, never crossing it.\n     */\n    private void onTimerTick() {\n        if (prepareClose) {\n            return;\n        }\n        try {\n            collector.sendFlushSignal(\n                    currentTaskLocation.getJobId(), currentTaskLocation.getTaskID());\n        } catch (Exception e) {\n            log.warn(\"Failed to broadcast FlushSignal from task {}\", currentTaskLocation, e);\n        }\n    }\n\n    private Address getEnumeratorTaskAddress() throws ExecutionException, InterruptedException {\n        return (Address)\n                runningTask\n                        .getExecutionContext()\n                        .sendToMaster(new GetTaskGroupAddressOperation(enumeratorTaskLocation))\n                        .get();\n    }\n\n    @Override\n    public void close() throws IOException {\n        try {\n            context.getEventListener().onEvent(new ReaderCloseEvent());\n            reader.close();\n            super.close();\n        } finally {","sourceCodeStart":185,"sourceCodeEnd":221,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-engine/seatunnel-engine-server/src/main/java/org/apache/seatunnel/engine/server/task/flow/SourceFlowLifeCycle.java#L185-L221","documentation":"SourceFlowLifeCycle.onTimerTick periodically broadcasts a FlushSignal via collector.sendFlushSignal. If that call throws, this warning is logged (non-fatal) naming the current task. The flush of source-side buffered data for this tick is skipped; checkpointing may be delayed or marked incomplete for that interval.","triggerScenarios":"The periodic flush timer fires and sendFlushSignal(jobId, taskID) throws, e.g. because the target operation/transport is unavailable, the task is shutting down, or an internal messaging error occurs.","commonSituations":"Tasks being cancelled/restarted while the timer tick fires concurrently; cluster node shutdown mid-flush; transient engine-internal communication failures between task and collector.","solutions":["Usually ignorable if it appears only during job shutdown/cancel; confirm job completed or was cancelled as expected.","If it appears during normal running, check task/worker health and engine logs around the timestamp for transport or operation failures.","Retry the job if checkpoint data loss was observed; verify checkpoint interval vs flush interval alignment.","Upgrade if a known race between timer ticks and task teardown is fixed in a later SeaTunnel version."],"exampleFix":"// before: flush timer keeps firing during task teardown\n// (race logs this warning at cancel)\n// after: cancel the flush timer before closing the task\nsourceFlowLifeCycle.closeFlushTimer(); // ensure timer stopped before cancel completes","handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"// engine logs and continues; no caller-side hook\nif (logContains(\"Failed to broadcast FlushSignal\")) {\n    verifyJobCompletionOrRestart();\n}","preventionTips":["Ignore during shutdown/cancel windows; only act if it fires during normal run.","Align checkpoint interval with flush timer so missed flushes are recovered.","Monitor worker health; transport failures precede this warning.","Keep the cluster on a stable network between nodes."],"tags":["flush","checkpoint","source","timer"],"backgroundTag":"flush-signal-failed","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}