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 [email protected] or file a JIRA ticket
with INFRA.
---