JVM/TI code review request (XS and M) (7182152)

Coleen Phillimore coleen.phillimore at oracle.com
Mon Feb 4 13:48:20 PST 2013


Ok, my poor eyes.   One short comment below.

On 2/4/2013 4:22 PM, Daniel D. Daugherty wrote:
> Thanks for the additional test comments. Replies embedded below.
>
>
> On 2/4/13 1:06 PM, Coleen Phillimore wrote:
>> On 2/4/2013 12:19 PM, Daniel D. Daugherty wrote:
>>> Adding back dropped aliases and people...
>>
>> I think I have all the aliases on this, this time.
>
> And the individual people also. Thanks!
>
>
>>>
>>> Thanks for reviewing the first test! Replies embedded below.
>>>
>>
>> Ok, now I see about the scaffolding framework for the first test. I 
>> can say it looks consistent with the other tests in that directory.
>>
>> I reviewed the second test too.  I have some questions.
>>
>> in 
>> http://cr.openjdk.java.net/~dcubed/8007420-webrev/0-jdk8-tl/test/java/lang/instrument/RedefineSubclassWithTwoInterfaces.sh.html
>>
>> In lines 70-77 you move the same two files twice.
>
> I don't think so. Getting rid of the
> "RedefineSubclassWithTwoInterfaces" prefix will make the
> real script code more apparent:
>
>   70 mv X_Target.java \
>   71     X_Target_1.java
>   72 mv X_Target.class \
>   73     X_Target_1.class
>   74 mv X_Impl.java \
>   75     X_Impl_1.java
>   76 mv X_Impl.class \
>   77     X_Impl_1.class
>
>> Also the file,
>>
>> http://cr.openjdk.java.net/~dcubed/8007420-webrev/0-jdk8-tl/test/java/lang/instrument/RedefineSubclassWithTwoInterfacesImpl_1.java.html 
>>
>>
>> Is exactly the same as the file 
>> RedefineSubclassWithTwoInterfacesImpl.java
>>
>> Isn't one supposed to be derived from Target_1 rather than Target or 
>> different in some way?
>
> The "_1" stuffis just for version naming purposes. The actual
> class name has to be the same between Foo.java and Foo_1.java.
>
> In this particular bug's case, we only needed to redefine
> RedefineSubclassWithTwoInterfacesImpl with an EMCP version
> to tickle the bug. That's why there are no differences
> between RedefineSubclassWithTwoInterfacesImpl.java and
> RedefineSubclassWithTwoInterfacesImpl_1.java.
>
> Good eyes though.

Can you put a comment about why there are no differences but it's a 
different file?

>
>
>> This second test makes more sense to me than the first anyway. Are 
>> you going to wait for the fix to get propagated before checking it in?
>
> Yes, I have to wait until the HSX fix has made it to the T&L repo
> before I can push the tests. Integrating failing tests intentionally
> is not permitted in T&L. Of course, you can integrate them disabled,
> but then you have to go back and enable the test sometime.

Yes, this is somewhat of a drag.

Everything else looks fine.
Thanks!
Coleen

>
> Dan
>
>
>> Thanks,
>> Coleen
>>
>>
>>>
>>> On 2/4/13 8:09 AM, Coleen Phillimore wrote:
>>>> On 2/1/2013 6:55 PM, Daniel D. Daugherty wrote:
>>>>> And here is the webrev for the new tests (relative to JDK8-T&L):
>>>>>
>>>>> http://cr.openjdk.java.net/~dcubed/8007420-webrev/0-jdk8-tl/
>>>>
>>>> I am so impressed that you were able to write a test for this.
>>>
>>> Thanks. The shame of it is that I wrote this test back when I fixed
>>> the 1-liner bug back in 2009. The test never got pushed to the JDK
>>> repo so the regression was able to sneak in later. Sigh.
>>>
>>>
>>>> I can't follow this shell script at all. Who calls createJavaFile?
>>>
>>> This test is written using the JDI ShellScaffold.sh infrastructure
>>> in test/com/sun/jdi/ShellScaffold.sh (1106 lines of pure joy!).
>>> createJavaFile() is a hook called by ShellScaffold.sh to create
>>> the .java file that will be exercised by the test.
>>>
>>>
>>>> http://cr.openjdk.java.net/~dcubed/8007420-webrev/0-jdk8-tl/test/com/sun/jdi/RedefineAbstractClass.sh.html 
>>>>
>>>>
>>>> I think a limited amount of duplication of Java code in the test 
>>>> directory is worth having these scripts be more simple. It looks 
>>>> like the only thing that substituted in the java test is the main 
>>>> class, but lines 66 to 104 can be a stand-alone java source file.
>>>
>>> No, the main class just has the breakpoints.
>>>
>>> This is the line for the redefinition:
>>>
>>>   76     // @1 uncomment System.out.println("This is call " + 
>>> counter + " to checkFunc");
>>>
>>> so the original version doesn't have this line and new version
>>> has this line. The glue that makes all that work is in TestScaffold.sh.
>>>
>>> I don't remember for sure, but I think JDI ShellScaffold.sh does not
>>> work well with multiple .java files. It has been a long time since
>>> I've written a test in this format. These JDI .sh tests are meant to
>>> be standalone if need be. That's why this comment is always here:
>>>
>>>  143 # You could replace this next line with the contents
>>>  144 # of ShellScaffold.sh and this script will run just the same.
>>>  145 mysetup
>>>
>>>
>>>> Again, I can't really follow the logic here and I dread ever having 
>>>> to debug this.   Can you simplify this?
>>>
>>> Which part? By definition, RedefineClasses tests are complicated 
>>> because
>>> you have to have at least two versions of .class files, sometimes more.
>>> This test is reproducing a bug using "jdb" so there is all the infra
>>> that supports controlling "jdb".
>>>
>>> I think this test is as simple as it can be given the context, but I'm
>>> open to specific simplification suggestions.
>>>
>>> Did you plan to review the java.lang.instrument (JLI) test? It's a bit
>>> more convoluted because it is trying to mimic the WLS test case.
>>>
>>> Dan
>>>
>>>
>>>>
>>>> Thanks,
>>>> Coleen
>>>>
>>>>>
>>>>> As always, comments and suggestions are welcome.
>>>>>
>>>>> Dan
>>>>>
>>>>>
>>>>> On 2/1/13 4:39 PM, Daniel D. Daugherty wrote:
>>>>>> > There are two new tests that will be pushed to the JDK repos using
>>>>>> > a different bug ID (not yet filed):
>>>>>>
>>>>>> New bug is now filed:
>>>>>>
>>>>>>     8007420 add test for 6805864 to com/sun/jdi, add test for 
>>>>>> 7182152
>>>>>>             to java/lang/instrument
>>>>>> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8007420
>>>>>>     https://jbs.oracle.com/bugs/browse/JDK-8007420
>>>>>>
>>>>>> Of course, the tests cannot be pushed until the HSX changes have 
>>>>>> made
>>>>>> it into a promoted build and thus available to JDK8-T&L.
>>>>>>
>>>>>> Dan
>>>>>>
>>>>>>
>>>>>> On 2/1/13 12:55 PM, Daniel D. Daugherty wrote:
>>>>>>> Greetings,
>>>>>>>
>>>>>>> I have a fix for the following JVM/TI bug:
>>>>>>>
>>>>>>>     7182152 Instrumentation hot swap test incorrect monitor count
>>>>>>> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7182152
>>>>>>>     https://jbs.oracle.com/bugs/browse/JDK-7182152
>>>>>>>
>>>>>>> The fix for the bug in the product code is one line:
>>>>>>>
>>>>>>> src/share/vm/oops/klassVtable.cpp:
>>>>>>>
>>>>>>> @@ -992,18 +1020,50 @@
>>>>>>>            // RC_TRACE macro has an embedded ResourceMark
>>>>>>>            RC_TRACE(0x00200000, ("itable method update: %s(%s)",
>>>>>>>              new_method->name()->as_C_string(),
>>>>>>> new_method->signature()->as_C_string()));
>>>>>>>          }
>>>>>>> -        break;
>>>>>>> +        // cannot 'break' here; see for-loop comment above.
>>>>>>>        }
>>>>>>>        ime++;
>>>>>>>      }
>>>>>>>    }
>>>>>>>  }
>>>>>>>
>>>>>>> and is applicable to JDK7u10/HSX-23.6 and JDK7u14/HSX-24. Coleen
>>>>>>> already fixed the bug as part of the Perm Gen Removal (PGR) project
>>>>>>> in HSX-25. Yes, we found a 1-line bug fix buried in the monster PGR
>>>>>>> changeset. Many thanks to Coleen for her help in this bug hunt!
>>>>>>>
>>>>>>> The rest of the code in the webrevs are:
>>>>>>>
>>>>>>> - additional JVM/TI tracing code backported from Coleen's PGR 
>>>>>>> changeset
>>>>>>> - additional JVM/TI tracing code added by me and forward ported 
>>>>>>> to HSX-25
>>>>>>> - a new -XX:TraceRedefineClasses=16384 flag value for finding these
>>>>>>>   elusive old or obsolete methods
>>>>>>> - exposure of some printing code to the PRODUCT build so that 
>>>>>>> the new
>>>>>>>   tracing is available in a PRODUCT build
>>>>>>>
>>>>>>> You might be wondering why the new tracing code is exposed in a 
>>>>>>> PRODUCT
>>>>>>> build. Well, it appears that more and more PRODUCT bits 
>>>>>>> deployments are
>>>>>>> using JVM/TI RedefineClasses() and/or RetransformClasses() at 
>>>>>>> run-time
>>>>>>> to instrument their systems. This bug (7182152) was only 
>>>>>>> intermittently
>>>>>>> reproducible in the WLS environment in which it occurred so I 
>>>>>>> made the
>>>>>>> tracing available in a PRODUCT build to assist in the hunt.
>>>>>>>
>>>>>>> Raj from the WLS team has also verified that the HSX-23.6 
>>>>>>> version of
>>>>>>> fix resolves the issue in his environment. Thanks Raj!
>>>>>>>
>>>>>>> Here are the URLs for the three webrevs:
>>>>>>>
>>>>>>> http://cr.openjdk.java.net/~dcubed/7182152-webrev/0-hsx23.6/
>>>>>>> http://cr.openjdk.java.net/~dcubed/7182152-webrev/0-hsx24/
>>>>>>> http://cr.openjdk.java.net/~dcubed/7182152-webrev/0-hsx25/
>>>>>>>
>>>>>>> I have run the following test suites from the JPDA stack on the
>>>>>>> JDK7u10/HSX-23.6 version of the fix with 
>>>>>>> -XX:TraceRedefineClasses=16384
>>>>>>> specified:
>>>>>>>
>>>>>>>     sdk-jdi
>>>>>>>     sdk-jdi_closed
>>>>>>>     sdk-jli
>>>>>>>     vm-heapdump
>>>>>>>     vm-hprof
>>>>>>>     vm-jdb
>>>>>>>     vm-jdi
>>>>>>>     vm-jdwp
>>>>>>>     vm-jvmti
>>>>>>>     vm-sajdi
>>>>>>>
>>>>>>> The tested configs are:
>>>>>>>
>>>>>>>     {Solaris-X86, WinXP}
>>>>>>>       X {Client VM, Server VM}
>>>>>>>       X {-Xmixed, -Xcomp}
>>>>>>>       X {product, fastdebug}
>>>>>>>
>>>>>>> With the 1-liner fix in place, the new tracing code does not 
>>>>>>> find any
>>>>>>> instances of this failure mode in any of the above test suites. 
>>>>>>> Without
>>>>>>> the the 1-liner fix in place, the new tracing code finds one 
>>>>>>> instance
>>>>>>> of this failure mode in the above test suites:
>>>>>>>
>>>>>>> test/java/lang/instrument/IsModifiableClassAgent.java
>>>>>>>
>>>>>>> There are two new tests that will be pushed to the JDK repos using
>>>>>>> a different bug ID (not yet filed):
>>>>>>>
>>>>>>>     test/com/sun/jdi/RedefineAbstractClass.sh
>>>>>>> test/java/lang/instrument/RedefineSubclassWithTwoInterfaces.sh
>>>>>>>
>>>>>>> There will be a separate review request for the new tests.
>>>>>>>
>>>>>>> I'm currently running the JPDA stack of tests on the JDK7u14/HSX-24
>>>>>>> and JDK8-B75/HSX-25 versions of the fix. That testing will likely
>>>>>>> take all weekend to complete.
>>>>>>>
>>>>>>> Thanks, in advance, for any comments and/or suggestions.
>>>>>>>
>>>>>>> Dan
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>



More information about the serviceability-dev mailing list