[jira] [Created] (FLINK-13565) Integrate springboot found error

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

[jira] [Created] (FLINK-13565) Integrate springboot found error

Shang Yuanchun (Jira)
feixue created FLINK-13565:
------------------------------

             Summary: Integrate springboot found error
                 Key: FLINK-13565
                 URL: https://issues.apache.org/jira/browse/FLINK-13565
             Project: Flink
          Issue Type: Improvement
          Components: Table SQL / Client
    Affects Versions: 1.8.1, 1.9.0
            Reporter: feixue


when Integrate springboot for 2.1.*, we init flink stream work for spring. in our local environment is work find. but when we submit it in dashboard for submit new job,and then click show plan, it show a internal error, the detail just like this:
{code:java}
2019-08-04 18:05:28 [ERROR] [ispatcherRestEndpoint-thread-3] [o.a.f.r.w.h.JarPlanHandler][196] Unhandled exception.
org.apache.flink.client.program.ProgramInvocationException: The main method caused an error: null
        at org.apache.flink.client.program.PackagedProgram.callMainMethod(PackagedProgram.java:546)
        at org.apache.flink.client.program.PackagedProgram.invokeInteractiveModeForExecution(PackagedProgram.java:421)
        at org.apache.flink.client.program.OptimizerPlanEnvironment.getOptimizedPlan(OptimizerPlanEnvironment.java:83)
        at org.apache.flink.client.program.PackagedProgramUtils.createJobGraph(PackagedProgramUtils.java:80)
        at org.apache.flink.runtime.webmonitor.handlers.utils.JarHandlerUtils$JarHandlerContext.toJobGraph(JarHandlerUtils.java:126)
        at org.apache.flink.runtime.webmonitor.handlers.JarPlanHandler.lambda$handleRequest$1(JarPlanHandler.java:100)
        at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1590)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.reflect.InvocationTargetException: null
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:47)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:86)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.flink.client.program.PackagedProgram.callMainMethod(PackagedProgram.java:529)
        ... 9 common frames omitted
Caused by: org.apache.flink.client.program.OptimizerPlanEnvironment$ProgramAbortException: null
        at org.apache.flink.streaming.api.environment.StreamPlanEnvironment.execute(StreamPlanEnvironment.java:70)
        at org.apache.flink.streaming.api.environment.StreamPlanEnvironment.execute(StreamPlanEnvironment.java:53)
        at com.ggj.center.boot.demo.DemoApplication.run(DemoApplication.java:73)
        at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:779)
        at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:763)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:318)
        at com.ggj.boot.demo.DemoApplication.main(DemoApplication.java:29)
        ... 22 common frames omitted
 {code}
 just read zhe source code, we found in PackageProgram.java file, the callMainMethod() call main method and catch InvocationTargetException for it. when throw ProgramAbortException, it will throw as InvocationTargetException and it target is ProgramAbortException. so flink can catch this and check the target exception for Error and throw angin.

 
{code:java}
try {
   mainMethod.invoke(null, (Object) args);
}
catch (IllegalArgumentException e) {
   throw new ProgramInvocationException("Could not invoke the main method, arguments are not matching.", e);
}
catch (IllegalAccessException e) {
   throw new ProgramInvocationException("Access to the main method was denied: " + e.getMessage(), e);
}
catch (InvocationTargetException e) {
   Throwable exceptionInMethod = e.getTargetException();
   if (exceptionInMethod instanceof Error) {
      throw (Error) exceptionInMethod;
   } else if (exceptionInMethod instanceof ProgramParametrizationException) {
      throw (ProgramParametrizationException) exceptionInMethod;
   } else if (exceptionInMethod instanceof ProgramInvocationException) {
      throw (ProgramInvocationException) exceptionInMethod;
   } else {
      throw new ProgramInvocationException("The main method caused an error: " + exceptionInMethod.getMessage(), exceptionInMethod);
   }
}
{code}
 

 OptimizerPlanEnvironment will catch it and check optimizerPlan is not null and decision it run success or throw ProgramInvocationException.

 
{code:java}
try {
   prog.invokeInteractiveModeForExecution();
}
catch (ProgramInvocationException e) {
   throw e;
}
catch (Throwable t) {
   // the invocation gets aborted with the preview plan
   if (optimizerPlan != null) {
      return optimizerPlan;
   } else {
      throw new ProgramInvocationException("The program caused an error: ", t);
   }
}{code}
 

 In springboot to start application is reflect main method also, when we operation in dashboard, zhe cell order is: flink > springboot > flink stream client.  Two reflect make the 

InvocationTargetException target exception is InvocationTargetException not Error.

For this, we can't Integrate springboot, or there have any other method to do this, please tell me, thank you.



--
This message was sent by Atlassian JIRA
(v7.6.14#76016)