Hi Ujwal,

The java part looks good to me.

ThreadMXBean.java:

 775      * @implSpec if not implemented, the method will throw
 776      * an UnsupportedOperationException.

and

 862      * @implSpec if not implemented, the method will throw
 863      * an UnsupportedOperationException.

I wonder if a better wording wouldn't be:

  * @implSpec If not overridden in subclasses, the default
  *           implementation of this method
  *           throws an UnsupportedOperationException.

best regards,

-- daniel

On 11/08/2017 14:20, Ujwal Vangapally wrote:
Gentle Reminder.


On 8/9/2017 10:45 PM, Ujwal Vangapally wrote:

Thanks for the review Mandy,

kindly see my comments inline.

webrev: http://cr.openjdk.java.net/~uvangapally/webrev/2017/8185003/webrev.03/

csr: https://bugs.openjdk.java.net/browse/JDK-8185705

Ujwal


On 8/9/2017 5:23 AM, mandy chung wrote:



On 8/8/17 1:27 AM, Ujwal Vangapally wrote:
Hi,

below is the link to new webrev incorporating review comments.

webrev: http://cr.openjdk.java.net/~uvangapally/webrev/2017/8185003/webrev.02/

769 * The Behaviour is same as {@link #getThreadInfo(long[], boolean, boolean)}
770 * except that the stack trace depth is limited.
771 *
Alternatively you can copy the javadoc from getThreadInfo(long[], boolean, boolean) to the new method, saying:

Returns the thread info for each thread whose ID is in the input array {@code ids}, with stack trace of the specified maxinum number of elements and synchronization information.

getThreadInfo(long[], boolean, boolean) can replace most of the javadoc by saying: This is equivalent to calling: getThreadInfo(ids, lockedMonitors, lockedSynchronizers, Integer.MAX_VALUE)

Same applies to dumpAllThreads.

did it as you suggested but it is not shown very clearly in webrev, kindly take a look.
I did look at grepcode and see any custom implementation of ThreadMXBean. There are cases that extends ThreadMXBean which mostly attempts to call com.sun.management.ThreadMXBean without referencing the type. They are not custom implementation of ThreadMXBean.

I agree with Daniel's suggestion to make the new methods with a default implementation throwing UOE. This might make existing implementation easier to migrate.

made them default methods.
sun/management/ThreadImpl.java
495 if(maxDepth < 0) { 500 return dumpThreads0(null, lockedMonitors, lockedSynchronizers,maxDepth);
missing space between if and ( and ,

changed it.
src/java.management/share/native/libmanagement/ThreadImpl.c
   long line 138.  You can wrap it.

did it.
src/share/vm/services/jmm.h
This changes the interface and so you should add JMM_VERSION_10 even we don't support mixing hotspot with of different version of JDK libraries.

not sure if I made this change correctly please confirm by seeing webrev.
src/share/vm/services/management.cpp
   line 1163 is quite long line.  Can you wrap it?

did it.
jmm_DumpThreads - it should probably validate maxDepth as jmm_GetThreadInfo does.
we can do it as an additional check, I didn't find anything which calls jmm_DumpThreads with negative value for maxDepth. As we are verifying maxDepth value at java level and I didn't use -1 as a special case for maxDepth to print full stack.
But I see no harm in adding an additional check at native level.

verified that

MBeanServerConnection.invoke throws ReflectionException when invoked with a method that doesn't exist in remote MBean server.

UndeclaredThrowableException will be throwed when a client gets proxy of remote MBean server and calls a method that doesn't exist on remote Mbean server.

do we need to develop Automated tests for verifying above cases ?

It'd be useful unless there is existing JMX tests covering this scenario. This is more on JMX framework and it's okay to separate a new issue for adding these new tests.

We should re-read the specification and see if spec clarification is needed.
will do this soon.

Mandy



Reply via email to