[jira] [Created] (FLINK-18956) StreamTask.invoke should catch Throwable instead of Exception

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[jira] [Created] (FLINK-18956) StreamTask.invoke should catch Throwable instead of Exception

Shang Yuanchun (Jira)
Dian Fu created FLINK-18956:
-------------------------------

             Summary: StreamTask.invoke should catch Throwable instead of Exception
                 Key: FLINK-18956
                 URL: https://issues.apache.org/jira/browse/FLINK-18956
             Project: Flink
          Issue Type: Bug
          Components: Runtime / Task
    Affects Versions: 1.11.0
            Reporter: Dian Fu
            Assignee: Dian Fu
             Fix For: 1.12.0, 1.11.2


In StreamTask.invoke, we should catch Throwable. Otherwise, cleanUpInvoke() will not be called if Error is thrown:

{code}
        @Override
        public final void invoke() throws Exception {
                try {
                        beforeInvoke();

                        // final check to exit early before starting to run
                        if (canceled) {
                                throw new CancelTaskException();
                        }

                        // let the task do its work
                        runMailboxLoop();

                        // if this left the run() method cleanly despite the fact that this was canceled,
                        // make sure the "clean shutdown" is not attempted
                        if (canceled) {
                                throw new CancelTaskException();
                        }

                        afterInvoke();
                }
                catch (Exception invokeException) {
                        failing = !canceled;
                        try {
                                cleanUpInvoke();
                        }
                        // TODO: investigate why Throwable instead of Exception is used here.
                        catch (Throwable cleanUpException) {
                                Throwable throwable = ExceptionUtils.firstOrSuppressed(cleanUpException, invokeException);
                                throw (throwable instanceof Exception ? (Exception) throwable : new Exception(throwable));
                        }
                        throw invokeException;
                }
                cleanUpInvoke();
        }
{code}



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