RFR: 8262157: LingeredApp.startAppExactJvmOpts does not print app output when launching fails

Ioi Lam iklam at openjdk.java.net
Tue Feb 23 03:10:40 UTC 2021


On Tue, 23 Feb 2021 02:55:01 GMT, Chris Plummer <cjplummer at openjdk.org> wrote:

>> Hi, Please review
>> 
>>  When debugging for other test case which uses jcmd to attach LingeredApp process, found there is no error information logged when the app started with function 'startAppExactJvmOpts' exits due to some reason. This is not convenient for trace what is the app failure.
>>  This simple fix for adding finishApp to print out error information when LingeredApp could not start with startAppExactJvmOpts, this is similar to startApp.
>> 
>> Tests: This is a simple fix and done tests with test/jdk/sun/tools/jinfo which uses the function startAppExactJvmOpts to create LingeredApp, also the test case in debugging, which indeed captured the error message upon start error.
>> 
>> Thanks
>> Yumin
>
> test/lib/jdk/test/lib/apps/LingeredApp.java line 419:
> 
>> 417:             theApp.waitAppReady();
>> 418:         } catch (Exception ex) {
>> 419:             theApp.finishApp();
> 
> I'm worried about the output appearing twice in some tests:
> 
>         try {
>             ...
>             theApp = new LingeredAppWithLargeArray();
>             LingeredApp.startAppExactJvmOpts(theApp, vmArgs);
>             attachAndDump(heapDumpFileName, theApp.getPid());
>         } finally {
>             LingeredApp.stopApp(theApp);
>             heapDumpFile.delete();
>         }
> 
> So we always call `stopApp()`:
> 
>     public void stopApp() throws IOException {
>            ...
>            if (appProcess != null) {
>            ...
>             finishApp();
>            ...
>         }
>     }
> 
> 
> Which means we always call `finishApp()`, which means we always print the output. With your changes won't we see the output twice when there is an exception?
> 
> In the CR it looks like `LingeredApp.startAppExactJvmOpts()` is being call from `JCmdTest.java`. I don't see this test. Is it under development? Does it need a `stopApp()` call?

It seems error prone to have to call finishApp() manually in order to see the error log. Since LingeredApp.startApp calls finishApp() on exceptions, shouldn't startAppExactJvmOpts do the same thing?

-------------

PR: https://git.openjdk.java.net/jdk/pull/2679


More information about the hotspot-runtime-dev mailing list