apache/seatunnel · warning

currentThread already be interrupted, skip trigger…

Error message

currentThread already be interrupted, skip trigger checkpoint

What it means

CheckpointCoordinator.tryTriggerPendingCheckpoint skips triggering a checkpoint when the current thread is already interrupted, logging this warning. This prevents scheduling checkpoint work on a thread being torn down, which would throw unhandled InterruptedExceptions or submit work into a closing executor.

Solutions

  1. Usually benign during job shutdown — no action needed; checkpoints are irrelevant once the job is cancelled/closed.
  2. If seen outside shutdown, inspect why the coordinator thread got interrupted (thread-pool shutdown, failover) and fix the lifecycle ordering.
  3. Ensure jobs are cancelled via the engine's cancel API rather than killing threads/executors directly.
  4. Check for repeatable interrupt sources (aggressive executor shutdownNow in custom plugins) that race the coordinator.
Defensive patterns

Strategy: try-catch

Validate before calling

if (Thread.currentThread().isInterrupted()) { skipCheckpointTrigger(); return; }

Prevention

When it happens

Trigger: tryTriggerPendingCheckpoint (invoked from scheduleTriggerPendingCheckpoint, readyToClose, or restoreCoordinator) runs on a thread whose interrupt flag is set — typically during job cancel/close/failover when checkpoint timers fire concurrently with shutdown.

Common situations: Job cancellation while a periodic checkpoint timer fires; coordinator close racing a final checkpoint trigger; restore being interrupted by an external cancel request.

Related errors


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/d0e70aae20b20863. Report an issue: GitHub.

Appendix: source

Thrown at seatunnel-engine/seatunnel-engine-server/src/main/java/org/apache/seatunnel/engine/server/checkpoint/CheckpointCoordinator.java:733

     * <ul>
     *   <li>The current thread must not be interrupted
     *   <li>All pipeline tasks must be in READY state
     *   <li>The configured checkpoint interval must have elapsed (except for final or schema change
     *       checkpoints)
     * </ul>
     *
     * <p>If the minimum interval has not yet passed, the checkpoint trigger will be rescheduled for
     * the remaining delay time.
     *
     * <p>This mechanism ensures stable and controlled checkpoint scheduling, preventing excessive
     * checkpoint triggering while maintaining data consistency.
     *
     * @param checkpointType the type of checkpoint to trigger, which determines whether interval
     *     constraints should be applied
     */
    protected void tryTriggerPendingCheckpoint(CheckpointType checkpointType) {
        if (Thread.currentThread().isInterrupted()) {
            LOG.warn("currentThread already be interrupted, skip trigger checkpoint");
            return;
        }
        final long currentTimestamp = Instant.now().toEpochMilli();
        if (checkpointType.notFinalCheckpoint() && checkpointType.notSchemaChangeCheckpoint()) {
            if (!isAllTaskReady.get()) {
                LOG.info("Not all tasks are ready, skipping checkpoint trigger");
                return;
            }
            long interval = currentTimestamp - latestTriggerTimestamp.get();
            if (interval <= 0) {
                LOG.error(
                        "The time on your server may not be incremental which can lead checkpoint to stop. "
                                + "The latestTriggerTimestamp: ({}), but the currentTimestamp: ({})",
                        latestTriggerTimestamp.get(),
                        currentTimestamp);
            }
            if (interval < coordinatorConfig.getCheckpointInterval()) {
                LOG.info(

View on GitHub (pinned to cf67b549a7)