Open code review for 8061999 Enhance VM option parsing to allow options to be specified

Daniel D. Daugherty daniel.daugherty at oracle.com
Mon Jul 20 14:49:12 UTC 2015


Coleen,

Ron's out of the office today (Monday) so I'll chime in.

We asked Ron to finish addressing the round 0 code review comments
before rebasing his project to the current RT_Baseline in order to
preserve the proper context for those replies and adjustments.

Ron's project was last rebased just before Gerard's awesome cmd
line option validation work. We also knew that Jeremy's env var
changes were coming and that we likely had conflicts there. Lots
of dust is flying in the cmd line options arena lately!

Dan


On 7/17/15 12:49 PM, Coleen Phillimore wrote:
>
> Sorry, it's a RAII class.   I got the acronym confused with Robert 
> Strout :)
>
> Coleen
>
> On 7/17/15 2:47 PM, Coleen Phillimore wrote:
>>
>> Ron,
>>
>> The code that we've just reviewed and I'm sponsoring from Jeremy 
>> Manson directly conflicts with this code.   Jeremy has added a RESII 
>> class for JavaVMInitArgs that you should use.  I have other initial 
>> comments but I haven't gotten to reading all of this thread yet. 
>> Please wait for my code review.
>>
>> Thanks,
>> Coleen
>>
>> On 7/16/15 4:00 PM, Ron Durbin wrote:
>>> I will file it and thanks for the "r" review.
>>>
>>>> -----Original Message-----
>>>> From: gerard ziemski
>>>> Sent: Thursday, July 16, 2015 1:48 PM
>>>> To: Ron Durbin; hotspot-runtime-dev at openjdk.java.net
>>>> Subject: Re: Open code review for 8061999 Enhance VM option parsing 
>>>> to allow options to be specified
>>>>
>>>> hi Ron,
>>>>
>>>> I have no more comments, just one question: you say "A future
>>>> enhancement will be to refactor the options file processing to grow
>>>> memory like the environment variables do now." - is that enhancement
>>>> filed yet?
>>>>
>>>> Please consider this reviewed with small "r".
>>>>
>>>>
>>>> cheers
>>>>
>>>>
>>>> On 07/14/2015 05:21 PM, Ron Durbin wrote:
>>>>> Gerard,
>>>>>
>>>>> Thanks for your time in reviewing the code and providing comments.
>>>>> My responses to your comments inline below:
>>>>>
>>>>>
>>>>>> -----Original Message-----
>>>>>> From: Gerard Ziemski
>>>>>> Sent: Tuesday, June 23, 2015 1:53 PM
>>>>>> To: hotspot-runtime-dev at openjdk.java.net
>>>>>> Cc: Ron Durbin
>>>>>> Subject: Re: Open code review for 8061999 Enhance VM option 
>>>>>> parsing to allow options to be specified
>>>>>>
>>>>>> hi Ron,
>>>>>>
>>>>>> I'm sending you partial feedback, since I am starting to get a 
>>>>>> bit tired. I will spend more time reviewing
>>>> your
>>>>>> webrev tomorrow, but here is what I have so far:
>>>>>>
>>>>>> ---
>>>>>> src/share/vm/utilities/globalDefinitions.hp
>>>>>>
>>>>>> 1. Should we name the method "is_white()", not "iswhite()" since 
>>>>>> it's part of our code base? But then since
>>>> it's
>>>>>> a macro, shouldn't it actually be "IS_WHITE()" ?
>>>>>> ---
>>>>>> src/share/vm/runtime/arguments.hpp
>>>>>> [
>>>>> [Ron] While researching my answer to this comment, I realized
>>>>>          that I should have used the already existing isspace() 
>>>>> function
>>>>>          instead of creating the iswhite() macro. Will fix.
>>>>>
>>>>>> 1.
>>>>>>
>>>>>> All the arguments in alloc_JVM_options_list(), 
>>>>>> copy_JVM_options_from_buf() and parse_JVM_options_file() use
>>>>>> underscores in the arguments names except for 
>>>>>> merge_JVM_options_file(). I think the merge_JVM_options_file()
>>>>>> should be:
>>>>>>
>>>>>> +  static jint merge_JVM_options_file(const struct JavaVMInitArgs 
>>>>>> *args_in,
>>>>>> +                                     struct JavaVMInitArgs 
>>>>>> **args_out);
>>>>>>
>>>>> [Ron] This one is a reasonable clean up
>>>>>
>>>>>> ---
>>>>>> src/share/vm/runtime/arguments.cpp
>>>>>>
>>>>>> 1. Why do FreeVMOptions, DumpVMOptions, DumpVMOption and 
>>>>>> DumpOption start with capital letters? Shouldn't
>>>> their
>>>>>> names start with a lower case letter?
>>>>>>
>>>>> [Ron] This one is a reasonable clean up
>>>>>
>>>>>> 2. Line 4306. The pattern in Arguments::parse() seems to be to 
>>>>>> print out error message and return the error
>>>>>> value if something goes wrong, but we do vm_exit(1) instead?
>>>>>>
>>>>> [Ron ] The cases that will trigger this exit  on fail are extreme:
>>>>>        - missing or otherwise in accessible options files
>>>>>        -  Un-parsable options file, too big, too many options, 
>>>>> nonwhite space terminated options
>>>>>        - Unable to allocate memory for options files processing
>>>>>
>>>>>> 3. Line 4309. I was told that when it comes to NULL pointer check 
>>>>>> we should do (NULL == args), not the other
>>>> way
>>>>>> around.
>>>>>>
>>>>> [Ron] This one is a reasonable clean up
>>>>>
>>>>>> 4. Line 4375. Don't we need FreeVMOptions() here? Line 4382 as well?
>>>>>
>>>>> [Ron] Gerard  this one is a reasonable clean up
>>>>>
>>>>>> 5. Question. Why do we need N_MAX_OPTIONS?
>>>>> [Ron] Until recently N_MAX_OPTIONS applied to environment 
>>>>> variables too
>>>>>          N_MAX_OTIIONS is used  to limit the number of options and 
>>>>> thus the memory allocated.
>>>>>          A future enhancement will be to refactor the options file 
>>>>> processing to grow memory like the
>>>>>          environment variables do now.
>>>>>
>>>>>> 6. Question. Why do we need OPTION_BUFFER_SIZE? Can't we use "int 
>>>>>> bytes_needed = fseek(stream, 0, SEEK_END);
>>>>>> rewind(stream)" and have the code dynamically allocate memory 
>>>>>> without hard coded limits?
>>>>>>
>>>>> [Ron>] Until recently OPTION_BUFFER_SIZE applied to environment 
>>>>> variables too. \
>>>>>          OPTION_BUFFER_SIZE is used to limit the memory allocated 
>>>>> for reading the options.
>>>>>          A future enhancement will be to refactor the options file 
>>>>> processing to grow memory like the
>>>>>          environment variables do now.
>>>>>
>>>>>
>>>>>> 7. Line 3965. Can that comparison ever succeed? "read()" will not 
>>>>>> read more bytes (only less) than as
>>>> specified
>>>>>> by "bytes_alloc" and if it did, we would overwrite memory since 
>>>>>> our buf is only "bytes_alloc" big.
>>>>>>
>>>>> [Ron>] Yes that comparison can succeed. We only support an
>>>>>          options file that is <= OPTION_BUFFER_SIZE bytes in
>>>>>          size.
>>>>>
>>>>>           We allocate a read buffer that is OPTION_BUFFER_SIZE + 1
>>>>>           bytes in size for two reasons:
>>>>>
>>>>>          1) to have space for a NULL terminator when the
>>>>>          options file is the maximum number of bytes
>>>>>          in length
>>>>>          2) easy detection of an options file that is too large;
>>>>>          we try to read OPTION_BUFFER_SIZE + 1 bytes. If we
>>>>>          succeed, then the file is too big.
>>>>>
>>>>>
>>>>>> cheers
>>>>>>
>>>>>>
>>>>>> On 6/22/2015 7:52 AM, Ron Durbin wrote:
>>>>>> Webrev URL:
>>>>>> http://cr.openjdk.java.net/~rdurbin/8061999_OCR0_JDK9_webrev
>>>>>>
>>>>>>
>>>>>> RFE request:
>>>>>> https://bugs.openjdk.java.net/browse/JDK-8061999
>>>>>>
>>>>>> This RFE allows a file to be specified that holds VM Options that
>>>>>> would otherwise be specified on the command line or in an 
>>>>>> environment variable.
>>>>>> Only one options file may be specified on the command line and no 
>>>>>> options file
>>>>>> may be specified in either of the following environment variables
>>>>>> "JAVA_TOOL_OPTIONS" or "_JAVA_OPTIONS".
>>>>>>
>>>>>> The options file feature supports all VM options currently 
>>>>>> supported on
>>>>>> the command line, except the options file option. The option to 
>>>>>> specify an
>>>>>> options file is "-XX:VMOptionsFile=<Filename>".
>>>>>> The options file feature supports an options file up to 1024 
>>>>>> bytes in size
>>>>>> and up to 64 options.
>>>>>>
>>>>>> This feature has been tested on:
>>>>>>    OS:
>>>>>>      Solaris, MAC, Windows, Linux
>>>>>>    Tests:
>>>>>>      Manual unit tests
>>>>>>      JPRT with -testset hotspot (including the SQE proposed test 
>>>>>> coverage for this feature.)
>>>>>>
>>>>>>
>>>>>>
>>
>
>
>
>



More information about the hotspot-runtime-dev mailing list