RFR 8215398: -Xlog option usage => Invalid decorator '\temp\app_cds.log'.

Harold David Seigel harold.seigel at oracle.com
Fri Dec 21 18:32:30 UTC 2018


Hi David,

Here is the latest webrev.  The only difference between this and the 
previous webrev is the addition of "@bug 8215398" to the test:

    http://cr.openjdk.java.net/~hseigel/bug_8215398.3/webrev/index.html

The point that I'm trying to make about logging's handling of single 
quotes vs. double quotes can perhaps best be shown on Linux:

If I execute the following commands (on Linux):

    java -Xlog:safepoint=trace:\"dquotes.log\" -version

    java -Xlog:safepoint=trace:\'squotes.log\' -version

and then list out the current directory:

     > ls
    'squotes.log'  dquotes.log

it shows that logging stripped off the double quotes, but not the single 
quotes.


With my fix, these commands succeed on Windows even when run from the 
Windows shell:

    java -Xlog:safepoint=trace:d:\safepointtrace.txt -version
    java -Xlog:safepoint=trace:"d:\safepointtrace.txt" -version
    java -Xlog:safepoint=trace:"d:\safepoint trace.txt" -version

This one continues to fail because of the single quote issue described 
above:

    java -Xlog:safepoint=trace:'d:\safepointtrace.txt' -version

I hope we can move forward with this change.

Thanks, Harold


On 12/20/2018 9:28 PM, David Holmes wrote:
> On 21/12/2018 7:30 am, Harold David Seigel wrote:
>> Hi David,
>>
>> Thanks for looking at this!
>>
>> Please review this updated webrev.  The fix is the same but the 
>> webrev contains a new test instead of modifying an existing test:
>>
>>     http://cr.openjdk.java.net/~hseigel/bug_8215398.2/webrev/
>
> I think renaming the existing test would be better as the only 
> difference is the use of quotes. But if you want a new test please add:
>
> @bug 8215398
>
>> The logging implementation does not handle single quotes as 
>> expected.  For example, if the TestQuotedLogOutputs.java test is 
>> changed to use single quotes instead of double quotes, it will fail, 
>> even on Linux, because the single quotes are included as part of the 
>> file name.  They are not stripped off.  That is why "java 
>> -Xlog:safepoint=trace:'d:\safepointtrace.txt' -version" fails.
>
> It fails with double-quotes too! AFAICS it always fails in a Windows 
> command shell. Maybe the test only passes in cygwin shell?
>
> That said I don't understand your comment. I expect the quotes to 
> delimit the filename in case the filename has spaces in the path 
> component. If they aren't stripped off it wouldn't be tokenizing at 
> the internal ":", so ... ???
>
> Thanks,
> David
>
>> Perhaps a new bug is needed to change logging's handling of single 
>> quotes?  It's a bit surprising that this issue hasn't already been 
>> reported.
>>
>> Thanks, Harold
>>
>> On 12/20/2018 2:07 AM, David Holmes wrote:
>>> Hi Harold,
>>>
>>> On 19/12/2018 11:22 pm, Harold David Seigel wrote:
>>>> Hi,
>>>>
>>>> Please review this small change to fix JDK-8215398.  The fix works 
>>>> by not treating ':' as a delimiter in a -Xlog... option string if 
>>>> it is following by a '\' and preceded by either a single character 
>>>> or the text 'file='.  The fix is for Windows only.
>>>>
>>>> Open Webrev: 
>>>> http://cr.openjdk.java.net/~hseigel/bug_8215398/webrev/index.html
>>>
>>> I think I can follow the fix.
>>>
>>> But I'm a bit concerned about the test. AFAICS the test thought it 
>>> was already testing this case - albeit with the path quoted:
>>>
>>>   42         // Ensure log files can be specified with full path.
>>>   43         // On windows, this means that the file name will contain
>>>   44         // a colon ('C:\log.txt' for example), which is used to
>>>   45         // separate -Xlog: options 
>>> (-Xlog:tags:filename:decorators).
>>>   46         // Try to log to a file in our current directory, using 
>>> its absolute path.
>>>   47         String baseName = "test file.log";
>>>   48         Path filePath = Paths.get(baseName).toAbsolutePath();
>>>   49         String fileName = filePath.toString();
>>>   50         File file = filePath.toFile();
>>> ...
>>>   65         String[] validOutputs = new String[] {
>>>   66             quote + fileName + quote,
>>>   67             "file=" + quote + fileName + quote,
>>>   68             quote + fileName + quote + ":",
>>>   69             quote + fileName + quote + "::"
>>>   70         };
>>>
>>> But even quoted if I specify the drive designator in the path, it 
>>> fails! Here's a local attempt at this:
>>>
>>> D:\ade> apps\Java\jdk-11\fastdebug\bin\java 
>>> -Xlog:safepoint=trace:'d:\safepointtrace.txt' -version
>>> [0.014s][error][logging] Invalid decorator '\safepointtrace.txt''.
>>> Invalid -Xlog option 
>>> '-Xlog:safepoint=trace:'d:\safepointtrace.txt'', see error log for 
>>> details.
>>> Error: Could not create the Java Virtual Machine.
>>> Error: A fatal exception has occurred. Program will exit.
>>>
>>> So AFAICS the test can't possibly have been testing what it thought 
>>> it was testing! ???
>>>
>>> I'm also not sure about just adding some unquoted variants to the 
>>> existing TestQuotedLogOutputs without renaming the test and updating 
>>> the @summary
>>>
>>> Thanks,
>>> David
>>>
>>>> JBS Bug: https://bugs.openjdk.java.net/browse/JDK-8215398
>>>>
>>>> The fix was regression tested by running Mach5 tiers 1 and 2 tests 
>>>> and builds on Linux-x64, Windows, and Mac OS X, running tiers 3-5 
>>>> tests on Linux-x64, running JCK-12 Lang and VM tests on Linux-x64, 
>>>> and by hand on Windows.
>>>>
>>>> Thanks, Harol
>>>>
>>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/serviceability-dev/attachments/20181221/d7833ce7/attachment.html>


More information about the serviceability-dev mailing list