-
Improvement
-
Resolution: Fixed
-
Major
-
None
MemoryAssert#assertGC is disabled on Java 9 with the following comment:
// Disabled on Java 9+, because below will call Netbeans Insane Engine, which in turns tries to call setAccessible /* TODO version-number 1.6+: assumeTrue(JavaSpecificationVersion.forCurrentJVM().isOlderThanOrEqualTo(JavaSpecificationVersion.JAVA_8)); */ assumeTrue(new VersionNumber(System.getProperty("java.specification.version")).isOlderThan(new VersionNumber("9")));
I once tried to remove this restriction in jenkinsci/jenkins-test-harness#358, but end-to-end testing failed with
java.lang.reflect.InaccessibleObjectException: Unable to make field private static java.util.function.Function jdk.internal.ref.CleanerImpl.cleanerImplAccess accessible: module java.base does not "opens jdk.internal.ref" to unnamed module @62727399 at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:340) at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:280) at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:176) at java.base/java.lang.reflect.Field.setAccessible(Field.java:170) at org.netbeans.insane.impl.InsaneEngine.processClass(InsaneEngine.java:223) at org.netbeans.insane.impl.InsaneEngine.process(InsaneEngine.java:184) at org.netbeans.insane.impl.InsaneEngine.traverse(InsaneEngine.java:72) at org.netbeans.insane.impl.LiveEngine.traceImpl(LiveEngine.java:165) at org.netbeans.insane.impl.LiveEngine.trace(LiveEngine.java:143) at org.jvnet.hudson.test.MemoryAssert.fromRoots(MemoryAssert.java:292) at org.jvnet.hudson.test.MemoryAssert.assertGC(MemoryAssert.java:191) at org.jenkinsci.plugins.workflow.libs.LibraryMemoryTest.loaderReleased(LibraryMemoryTest.java:85) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:54) at org.jvnet.hudson.test.JenkinsRule$1.evaluate(JenkinsRule.java:601) at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:299) at org.junit.internal.runners.statements.FailOnTimeout$CallableStatement.call(FailOnTimeout.java:293) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.lang.Thread.run(Thread.java:829)
We rely on MemoryAssert#assertGC to prevent regressions. When dropping support for Java 8, we need to come up with an alternative way to keep these tests working.
Since manual end-to-end testing is fragile, the first step along this journey could be adding automated integration test coverage as proposed in jenkinsci/jenkins-test-harness#360.
- relates to
-
JENKINS-68019 Java 17 support for MemoryAssert#assertHeapUsage
- Closed
- links to