Github user rmetzger commented on a diff in the pull request: https://github.com/apache/flink/pull/750#discussion_r38511039 --- Diff: flink-runtime/src/main/scala/org/apache/flink/runtime/taskmanager/TaskManager.scala --- @@ -411,6 +411,23 @@ class TaskManager( log.debug(s"Cannot find task to fail for execution ${executionID})") } + // stops a task + case StopTask(executionID) => + val task = runningTasks.get(executionID) + if (task != null) { + try { + task.stopExecution() --- End diff -- I have to admit that this is the first time I'm looking into this pull request ;) Regarding the whole blocking / non-blocking discussion: I think even if we would write into the javadocs that the cancel()/stop() call has to be implemented in a non-blocking fashion, there would be still users who do it wrong! Its just too risky to block the entire actor system by erroneous user code. (Aren't our windowing threads doing some magic in the close methods as well?!) I'm think that the canceling of Tasks in the task manager is also done using separate cancelling threads? For the Kafka source: I believe we can move the "fetcher.close()" and offsetHandler.close() into the close() method as well. (We would probably need to add cancel() method to the Fetcher interface). But I would not touch the Kafka consumer and make the stop() mechanism more robust.
--- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastruct...@apache.org or file a JIRA ticket with INFRA. ---