[ 
https://issues.apache.org/jira/browse/FLINK-24182?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17411711#comment-17411711
 ] 

Arvid Heise commented on FLINK-24182:
-------------------------------------

I also saw another source of interrupts. Not too sure on this one, but ideally 
for me, only the Interrupter interrupts and nothing else.

{noformat}
    @Override
    protected void cancelTask() {
        if (stopped.compareAndSet(false, true)) {
            if (isFailing()) {
                interruptSourceThread(true);
            }
            cancelOperator(true);
        }
    }

    private void cancelOperator(boolean interruptThread) {
        try {
            if (mainOperator != null) {
                mainOperator.cancel();
            }
        } finally {
            interruptSourceThread(interruptThread);
        }
    }

    private void interruptSourceThread(boolean interrupt) {
        // Nothing need to do if the source is finished on restore
        if (operatorChain != null && operatorChain.isFinishedOnRestore()) {
            return;
        }

        if (sourceThread.isAlive()) {
            if (interrupt) {
                sourceThread.interrupt();
            }
        } else if (!sourceThread.getCompletionFuture().isDone()) {
            // source thread didn't start
            sourceThread.getCompletionFuture().complete(null);
        }
    }
{noformat}


> Tasks canceler should not immediately interrupt
> -----------------------------------------------
>
>                 Key: FLINK-24182
>                 URL: https://issues.apache.org/jira/browse/FLINK-24182
>             Project: Flink
>          Issue Type: Improvement
>          Components: Runtime / Task
>            Reporter: Arvid Heise
>            Priority: Major
>
> While debugging resource leaks (FLINK-24131), I found that any connector is 
> immediately interrupted on cancel. Hence, any attempts of using blocking 
> calls in {{close}} to cleanup resources are immediately unreliable (e.g. 
> aborting transactions).
> It would be nice if tasks get a grace period (e.g. 
> task.cancellation.interval) where they can try to free resources in a proper, 
> potentially blocking fashion before being interrupted.
> Nevertheless, connectors should always expect interruptions during shutdown, 
> in particular when the user-configurable grace period is depleted. I'd add 
> that to the connector documentation in a separate effort.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to