openj9 icon indicating copy to clipboard operation
openj9 copied to clipboard

AOT jsr292Test test_bindTo_interfaceMethodImplementation_package - Successfully invoked package private implementation of an interface method, StackWalkerTest testClassLoaderName Wrong classloader name expected

Open pshipton opened this issue 1 year ago • 12 comments
trafficstars

https://openj9-jenkins.osuosl.org/job/Test_openjdk17_j9_extended.functional_s390x_linux_aot_Personal/232/ https://openj9-jenkins.osuosl.org/job/Test_openjdk11_j9_extended.functional_s390x_linux_aot_Personal_testList_1/270/ jsr292Test_1 https://openj9-jenkins.osuosl.org/job/Test_openjdk11_j9_extended.functional_s390x_linux_aot_Personal_testList_0/270 jsr292Test_0

=== AOT ITERATION 2 ===

07:27:01  FAILED: test_bindTo_interfaceMethodImplementation_package
07:27:01  java.lang.AssertionError: Successfully invoked package private implementation of an interface method.
07:27:01  	at org.testng.Assert.fail(Assert.java:96)
07:27:01  	at com.ibm.j9.jsr292.InterfaceHandleTest.test_bindTo_interfaceMethodImplementation_package(InterfaceHandleTest.java:102)

This is related so I didn't open another issue.

https://openj9-jenkins.osuosl.org/job/Test_openjdk11_j9_extended.functional_s390x_linux_aot_Personal_testList_0/270 StackWalkerTest_0

09:06:16  FAILED: testClassLoaderName
09:06:16  java.lang.AssertionError: Wrong classloader name expected [TestMyloaderInstance] but found [null]
09:06:16  	at org.testng.Assert.fail(Assert.java:96)
09:06:16  	at org.testng.Assert.failNotEquals(Assert.java:776)
09:06:16  	at org.testng.Assert.assertEqualsImpl(Assert.java:132)
09:06:16  	at org.testng.Assert.assertEquals(Assert.java:118)
09:06:16  	at org.testng.Assert.assertEquals(Assert.java:453)
09:06:16  	at org.openj9.test.stackWalker.MyRunnable.run(MyRunnable.java:45)
09:06:16  	at org.openj9.test.stackWalker.StackWalkerTest.testClassLoaderName(StackWalkerTest.java:243)

Changes from last successful build https://openj9-jenkins.osuosl.org/job/Pipeline-Build-Test-AOT/291/ https://github.com/eclipse-openj9/openj9/compare/bc7affe3fed31...581a248f98c https://github.com/eclipse-openj9/openj9-omr/compare/3a218f25ea0...770936378ec https://github.com/ibmruntimes/openj9-openjdk-jdk11/compare/839808e0...720cbbf6053

pshipton avatar Jun 28 '24 15:06 pshipton

@dsouzai fyi

pshipton avatar Jun 28 '24 15:06 pshipton

These are the changes in omr and openj9:

OMR:

* 8aa948709d - x86-64: Use rep movs instructions if array copy size greater than 32 bytes <Annabelle Huo> (Mon Jun 17 11:26:23 2024 -0400)
* de2d500de7 - Fix trace format for MemorySubSpace <Aleksandar Micic> (Mon Jun 17 13:12:16 2024 -0400)
* 803891a474 - Delete TR::SelectOpt, which is unused <Devin Papineau> (Thu Jun 13 14:09:22 2024 -0400)
* ff2d7abe63 - Revert "Change arraycmp length child to 64 bits" <Henry Zongaro> (Fri Jun 14 12:00:40 2024 -0400)
* 512f1b8434 - AArch64: Improve *cmp*-*select instruction sequence <KONNO Kazuhiro> (Tue Jun 11 10:54:16 2024 +0900)
* 0d01543c22 - Add option to enable vector API <Bradley Wood> (Wed Jun 12 11:50:48 2024 -0400)
* 9589a576ef - Change arraycmp length child to 64 bits <Spencer Comin> (Wed May 1 09:46:39 2024 -0400)
* 51f86018b1 - Fix omrgenerate_ieat_dump.s assembly instruction to load 64 bit <Gaurav Chaudhari> (Fri May 17 11:12:17 2024 -0400)
* b39e1640ac - omr_static_lib/makefile should not compile anything <Keith W. Campbell> (Tue Jun 11 10:35:23 2024 -0400)
* c92cfa9848 - Update GCC version in C++ supported features documentation <Nathan Henderson> (Tue Jun 11 07:39:48 2024 -0700)

OpenJ9:

* b7c75245fb - Adds compatibility to get docker image from non-default registry <Mahdi Ardekanian> (Wed Jun 19 12:44:11 2024 -0400)
* f6164c9923 - Fix J9NLS_VM_UNRECOGNISED_SUN_MISC_UNSAFE_MEMORY_ACCESS_VALUE <Peter Shipton> (Wed Jun 19 09:40:05 2024 -0400)
* 13951bc426 - Ignore ByteBufferHandle operations in unsafe fast path <Devin Papineau> (Mon Jun 17 16:36:59 2024 -0400)
* 33cd27028e - Use sighandler_t instead of sig_handler_t <Keith W. Campbell> (Tue Jun 18 09:50:45 2024 -0400)
* bc1403159a - Remove some value type q cases <Theresa Mammarella> (Thu Oct 5 16:38:14 2023 -0400)
* 4ab337625f - Avoid NPE in testThreadMXBeanProxy debug output <Peter Shipton> (Mon Jun 17 17:09:00 2024 -0400)
* 0af9b126d6 - Remove extra newline chars from j9mprotect/j9munprotect.s <Gaurav Chaudhari> (Mon Jun 17 10:18:39 2024 -0700)
* 3723e4166a - Split IllegalAccessProtectedMethodTest to openj9 and hotspot variant - Split IllegalAccessProtectedMethodTest due to extendedHCR setting <LongyuZhang> (Mon Jun 17 10:01:51 2024 -0400)
* c0199d3e9b - Avoid NPE and AIOOBE exceptions <Keith W. Campbell> (Fri Jun 14 17:09:00 2024 -0400)
* 921596d25b - Format <Keith W. Campbell> (Fri Jun 14 17:02:05 2024 -0400)
* 6125cb98d4 - [FFI/Test_JDK21+] Convert the native string for downcall on z/OS <ChengJin01> (Wed Jun 12 15:16:44 2024 -0400)
* 4d9a1a9f7f - Disable failing ValueTypeTests <Theresa Mammarella> (Fri Jun 14 09:56:04 2024 -0400)
* da2a754720 - Modify testIdentityObjectOnJLObject to match ri <Theresa Mammarella> (Wed Jun 12 13:50:43 2024 -0400)
* 1cfbd5d6e7 - Remove tests to match lw5 <Theresa Mammarella> (Wed Jun 12 11:10:41 2024 -0400)
* ca48415479 - Replace q signatures with NullRestricted attribute <Theresa Mammarella> (Wed Jun 12 10:09:54 2024 -0400)
* ebe8f16b17 - Remove unused ValueTypeTests method and myUnsafe <Theresa Mammarella> (Wed Jun 12 09:51:59 2024 -0400)
* 3b17734737 - Delete the unused build flag build_openj9JDK8 <Peter Shipton> (Fri Jun 14 14:56:17 2024 -0400)
* fa7829da0b - JDK24 bring up <Jason Feng> (Fri Jun 14 11:49:02 2024 -0400)
* 6336ad3488 - Removed unused configuration flag 'build_openj9' <Keith W. Campbell> (Mon Jun 3 14:43:44 2024 -0400)
* ac7713d0ec - [FFI/JDK22+] Remove the heap argument identifier in downcall <ChengJin01> (Tue Jun 11 15:22:39 2024 -0400)

I went through the JIT changes and nothing really stood out. Might need to do the thing where we run grinders with builds where we first revert all the OMR changes, and then binary search through the J9 changes.

Probably also worth running a grinder on the failing tests to see how frequently it fails to get a baseline failure rate.

dsouzai avatar Jun 28 '24 18:06 dsouzai

Before we start making custom builds, I can run grinders on the existing nightly builds and try to narrow it further.

pshipton avatar Jun 28 '24 18:06 pshipton

Failed on 20240611-203600/20240611_822 passed on 20240610-202914/20240610_821

https://github.com/eclipse-openj9/openj9/compare/bc7affe3fed3...58b586d83e7 https://github.com/eclipse-openj9/openj9-omr/compare/361c9df886c...873509033

14:36:26  OpenJDK Runtime Environment (build 11.0.24-internal+0-adhoc.jenkins.BuildJDK11s390xlinuxNightly)
14:36:26  Eclipse OpenJ9 VM (build master-bc7affe3fed, JRE 11 Linux s390x-64-Bit Compressed References 20240610_821 (JIT enabled, AOT enabled)
14:36:26  OpenJ9   - bc7affe3fed
14:36:26  OMR      - 361c9df886c
14:36:26  JCL      - 839808e0d9f based on jdk-11.0.24+6)

14:27:25  OpenJDK Runtime Environment (build 11.0.24-internal+0-adhoc.jenkins.BuildJDK11s390xlinuxNightly)
14:27:25  Eclipse OpenJ9 VM (build master-58b586d83e7, JRE 11 Linux s390x-64-Bit Compressed References 20240611_822 (JIT enabled, AOT enabled)
14:27:25  OpenJ9   - 58b586d83e7
14:27:25  OMR      - 87350903300
14:27:25  JCL      - 839808e0d9f based on jdk-11.0.24+6)

pshipton avatar Jun 28 '24 18:06 pshipton

I'll create some custom builds. Doesn't look like any OMR change would cause it.

pshipton avatar Jun 28 '24 18:06 pshipton

Because this is AOT, maybe Make option -Xshareclasses enable -XX:+ShareOrphans?

None of the JIT changes really seem to have anything relocatable related 😕

dsouzai avatar Jun 28 '24 18:06 dsouzai

Yes, that one seems likely.

https://openj9-jenkins.osuosl.org/job/Pipeline-Build-Test-Personal/537 https://openj9-jenkins.osuosl.org/job/Pipeline-Build-Test-Personal/538

pshipton avatar Jun 28 '24 19:06 pshipton

If that one is the cause, it's adding classes to the cache which aren't normally cached, which allows AOT on them. I expect we'll need to debug why that AOT is causing the test failures.

pshipton avatar Jun 28 '24 19:06 pshipton

I've confirmed that Make option -Xshareclasses enable -XX:+ShareOrphans is the cause.

pshipton avatar Jun 28 '24 19:06 pshipton

I expect we'll need to debug why that AOT is causing the test failures.

Yeah I wonder if the AOT validations aren't strong enough to handle these new classes.

dsouzai avatar Jun 28 '24 20:06 dsouzai

@hangshao0 fyi

pshipton avatar Jun 28 '24 20:06 pshipton

For the testClassLoaderName test failure, the class is loaded from a custom class loader. It might be related to the romClass being in the SCC are all attached to the bootstrap class loader.

In this piece of code: https://github.com/eclipse-openj9/openj9/blob/c05e25e984f5a110e1a5a9f344fe84777293d1d0/runtime/vm/exceptiondescribe.c#L333-L344

The classLoader will be set to bootstrap class loader if the romClass is from SCC and ramClass is null if it is not loaded by bootstrap or application class loader, which is the case here. I guess getStackTraceIterator() won't set the class loader name in this case.

We already have this behaviour for all custom SCC aware class loaders. The custom class loader here is not SCC aware but https://github.com/eclipse-openj9/openj9/pull/19679 starts to put its class into SCC.

hangshao0 avatar Jun 28 '24 20:06 hangshao0

The InterfaceHandleTest failure is caused by incorrect romClass comparison result. The class comparison skipped the ROM_CLASS_MODIFIERS, and compareROMClassForEquality() returned TRUE for 2 classes with different modifiers.

https://github.com/eclipse-openj9/openj9/blob/dd01de181d2c24d8e8bd3899b6cb7cd1a5533316/runtime/bcutil/ComparingCursor.cpp#L466-L469

[2024-06-20T11:27:01.681Z] PASSED: test_bindTo_interfaceMethodImplementation_public
[2024-06-20T11:27:01.681Z] PASSED: testIfDirectHandleTestIsJitted
[2024-06-20T11:27:01.681Z] FAILED: test_bindTo_interfaceMethodImplementation_package
[2024-06-20T11:27:01.681Z] java.lang.AssertionError: Successfully invoked package private implementation of an interface method.
[2024-06-20T11:27:01.681Z] 	at org.testng.Assert.fail(Assert.java:96)
[2024-06-20T11:27:01.681Z] 	at com.ibm.j9.jsr292.InterfaceHandleTest.test_bindTo_interfaceMethodImplementation_package(InterfaceHandleTest.java:102)

The class generated by test_bindTo_interfaceMethodImplementation_public is stored into SCC and then incorrectly re-used by test_bindTo_interfaceMethodImplementation_package via romClass comparison, so the test failed.

hangshao0 avatar Jul 04 '24 19:07 hangshao0