> On 8 jan 2015, at 14:24, Jaroslav Bachorik <[email protected]> 
> wrote:
> 
> On 8.1.2015 12:12, David Holmes wrote:
>> On 8/01/2015 7:22 PM, Jaroslav Bachorik wrote:
>>> On 8.1.2015 03:45, David Holmes wrote:
>>>> On 8/01/2015 1:59 AM, Jaroslav Bachorik wrote:
>>>>> On 7.1.2015 02:31, David Holmes wrote:
>>>>>> On 17/12/2014 8:19 PM, Jaroslav Bachorik wrote:
>>>>>>> Please, review the following change.
>>>>>>> 
>>>>>>> Issue : https://bugs.openjdk.java.net/browse/JDK-8067447
>>>>>>> Webrev: http://cr.openjdk.java.net/~jbachorik/8067447/webrev.00
>>>>>>> 
>>>>>>> This patch is a precursor for implementing
>>>>>>> https://bugs.openjdk.java.net/browse/JDK-8054890 which itself is a
>>>>>>> part
>>>>>>> of JEP-228 (https://bugs.openjdk.java.net/browse/JDK-8043764).
>>>>>>> 
>>>>>>> Here, the code related to manipulating JVM flags is extracted to a
>>>>>>> separate ManagedFlags class and the codebease is adjusted to use this
>>>>>>> class.
>>>>>> 
>>>>>> Not clear to me what this is addressing exactly - do we really need
>>>>>> platform specific variants of "set flag" ??
>>>>> 
>>>>> It has just been moved from the corresponding attachListener_<os>.cpp
>>>>> files. And it is 'pd_set_flag' what, I suppose, means "platform
>>>>> dependent"?
>>>> 
>>>> Yes it does and it mostly made sense inside the already pd
>>>> attachListener implementations, but it isn't obvious to me that it makes
>>>> sense in the ManagedFlag context. It is the choice about whether the
>>>> flag can be changed that is "pd" not the actual setting and those
>>>> choices are inherent to the attachListener mechanism they are not
>>> 
>>> Why would the ability to set Solaris specific flags via DTrace be
>>> specific to the attachListener mechanism? Also, AFAICS here it is the
>>> mechanism of setting the flag which is "pd" and not the choice
>>> (DTrace::* vs CommandLineFlags::*)
>> 
>> The attachListener allows for manipulating VM flags if the attach
>> mechanism is used. In the Solaris case it turns on some DTrace flags.
>> The attach mechanism factors that into a pd_set_flags method that is
>> called for a given AttachOperation and so allows per platform behaviour.
>> But this is all part of the attach mechanism it isn't part of some
>> general flag management process.
> 
> I think I see the problem. Sorry it took me so long.
> 
> But, why the DTrace flags are only allowed to be set via the attachListener? 
> Can we allow their manipulation via com.sun.Flag? Or they need to stay 
> restricted to the attach mechanism only for whatever reason?

I don’t think there is any reason these Dtrace flags should only ba changeable 
by the attach mechanism. They could just as well be changed from JMX or jcmd. I 
guess the code is in attach because attach was the only way of changing flags 
at the time. The only difference I can see for these Dtrace flags compared to 
other flags is that some action needs to be taken if the flag is changed (calls 
to DTrace::set_extended_dprobes()). I also think the Dtrace flags should be 
marked as “manageable.”

/Staffan

> 
>> 
>>>> inherent to ManagedFlags - so this refactoring seems wrong to me. What
>>>> exactly is ManagedFlag supposed to represent?
>>> 
>>> A shared functionality between attachListener.cpp, management.cpp and
>>> the new diagnostic commands to be introduced later (as mentioned in the
>>> original synopsis of this RFR). It did seem preferable over just copying
>>> the implementation over to a few more places.
>> 
>> I need to see a clearer bigger picture. What I currently see doesn't
>> look right to me - attach mechanism functionality doesn't belong in a
>> general purpose ManagedFlags abstraction.
> 
> Bigger picture is that introducing yet another copy of the flag management 
> code for the purpose of adding the "VM.set_flag" diagnostic command did seem 
> unwieldy. The purpose of this refactoring was to get the shared parts to one 
> place.
> 
> -JB-
> 
>> 
>> David
>> -----
>> 
>>>> 
>>>>>> 
>>>>>> All the new code seems incorrect:
>>>>>> 
>>>>>> jint ManagedFlags::pd_set_flag(const char* flag_name, const char*
>>>>>> flag_value, Flag::Flags origin, outputStream* out) {
>>>>>>    out->print_cr("flag '%s' cannot be changed", op->arg(0));
>>>>>>    return JNI_ERR;
>>>>>>  };
>>>>>> 
>>>>>> op->arg(0) comes from the original code where op was an
>>>>>> AttachOperation*. Here is should be using flag_name.
>>>>> 
>>>>> Correct. Slipped through and then replicated :/
>>>> 
>>>> And obviously never compiled. RFRs should be for tested code.
>>> 
>>> Yes, one should run always "make clean" first, just in case. I should
>>> remember this well to prevent further embarrassment.
>>> 
>>> -JB-
>>> 
>>>> 
>>>> David
>>>> -----
>>>> 
>>>>> Updated webrev: http://cr.openjdk.java.net/~jbachorik/8067447/webrev.01
>>>>> 
>>>>> -JB-
>>>>> 
>>>>>> 
>>>>>> David
>>>>>> 
>>>>>> 
>>>>>>> Thanks,
>>>>>>> 
>>>>>>> -JB-
>>>>> 
>>> 
> 

Reply via email to