Hi Robert,

I've added serviceability to the cc list.

On 17/01/2012 12:04 PM, Robert Ottenhag wrote:
Webrev: http://cr.openjdk.java.net/~rottenha/7130391/webrev.00

This fix adds optional validation control to the setting of command-line 
switches in Hotspot, and allows it to have vendor-specific extensions if 
necessary.

Does this imply that the Java management APIs (eg com.sun.management.VMOption) need to be changed to reflect these restrictions? Presently VMOptions are either writeable or not, but this makes them conditionally-writeable.

The design follows the previously added framework for vendor-specific 
command-line switch extensions in CR7117389.

The validation control is handled by new boolean methods 
Flag::is_valid_<type>(value,origin) that are called at the beginning of each call to 
CommandLineFlags[Ex]::<type>AtPut() to verify that the new value and origin are valid 
replacements for the current value and origin for this flag.

When parsing the command line options, a failed validation will typically result in an error 
message and exit with "Unrecognized VM option '<flag-name>'".  When used 
dynamically using the attach API or management API the resulting operation will fail, leaving 
it up to the caller to handle it as appropriate.

The error message doesn't really seem appropriate - it may well be a recognized option, you just can't set it to that value in that way. Ideally there would be a way for the validation logic to supply a meaningful error message. In its absence the top-level message should reflect the new type of error.

Also some of the failures lead to crashes - which seems wrong to me - see below.

----

src/share/vm/services/management.cpp:

1821   if (!succeed) {
1822     THROW_MSG(vmSymbols::java_lang_IllegalArgumentException(),
1823               "This flag is not writeable with this value or origin.");

That's a rather cryptic error message. How about:

"Flag can not be set to the requested value using this API"

?

----

src/share/vm/runtime/globals_ext.hpp

With all the

inline bool Flag::is_valid_ext_T(T value, FlagValueOrigin origin)

functions, is it necessary to include the type T in the function name?

-----

src/share/vm/runtime/globals.cpp

The use of the guarantees seems wrong as it means an invalid option will trigger a VM crash rather than a clean exit during initialization. It seems to me that none of the code in arguments.cpp that uses the FLAG_SET_* macros (which in turn use the CommandLineFlagsEx functions you added the guarantees to) anticipates any possibility for failure. I think if you are going this path then you have no choice but to change the CommandLineFlagsEx methods to return bool and update the FLAG_SET macros to try and perform appropriate error handling.

David
-----


A simple use case for validation is a manageable flag whose current value can 
not be less than the previous value, while a more complex example may base the 
validation on multiple other flags, etc.

Thanks,

/Robert

Reply via email to