The nightly CI jobs include jobs that test using IBM Semeru 21, and on those jobs a set of 5 ClientInterceptorReturnData tests are failing every run:
https://ci.wildfly.org/viewType.html?buildTypeId=WF_MainNightlyJobs_StandardLinuxS390SemeruJdk21
https://ci.wildfly.org/viewType.html?buildTypeId=WF_MainNightlyJobs_StandardLinuxSemeru21
An example:
The failures involve some variant of this kind of thing:
java.lang.UnsupportedOperationException: can't get field offset on a hidden class: private final org.jboss.as.test.integration.ejb.remote.contextdata.UseCaseValidator$4 org.jboss.as.test.integration.ejb.remote.contextdata.UseCaseValidator$4$$Lambda/0x000000001c042f08.arg$1 at jdk.unsupported/sun.misc.Unsafe.objectFieldOffset(Unsafe.java:652) at org.jboss.marshalling.reflect.SerializableField.<init>(SerializableField.java:59) at org.jboss.marshalling.reflect.SerializableClass.getSerializableFields(SerializableClass.java:148) at org.jboss.marshalling.reflect.SerializableClass.<init>(SerializableClass.java:100) at org.jboss.marshalling.reflect.SerializableClassRegistry$1.computeValue(SerializableClassRegistry.java:62) at org.jboss.marshalling.reflect.SerializableClassRegistry$1.computeValue(SerializableClassRegistry.java:59) at java.base/java.lang.ClassValue.getFromHashMap(ClassValue.java:237) at java.base/java.lang.ClassValue.getFromBackup(ClassValue.java:219) at java.base/java.lang.ClassValue.get(ClassValue.java:125) at org.jboss.marshalling.reflect.SerializableClassRegistry.lookup(SerializableClassRegistry.java:83) at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:180) at org.jboss.marshalling.river.BlockMarshaller.doWriteObject(BlockMarshaller.java:65) at org.jboss.marshalling.river.BlockMarshaller.writeObject(BlockMarshaller.java:56) at org.jboss.marshalling.MarshallerObjectOutputStream.writeObjectOverride(MarshallerObjectOutputStream.java:50) at org.jboss.marshalling.river.RiverObjectOutputStream.writeObjectOverride(RiverObjectOutputStream.java:179) at java.base/java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:354) at java.base/java.util.HashMap.internalWriteEntries(HashMap.java:1952) at java.base/java.util.HashMap.writeObject(HashMap.java:1505) at org.jboss.marshalling.reflect.SerMethods.callWriteObject(SerMethods.java:69) at org.jboss.marshalling.reflect.SerializableClass.callWriteObject(SerializableClass.java:231) at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:1128) at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:271) at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1182) at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:1140) at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:1119) at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:271) at org.jboss.marshalling.river.RiverMarshaller.writeKnownObject(RiverMarshaller.java:735) at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:217) at org.jboss.marshalling.river.RiverMarshaller.doWriteFields(RiverMarshaller.java:1182) at org.jboss.marshalling.river.RiverMarshaller.doWriteSerializableObject(RiverMarshaller.java:1140) at org.jboss.marshalling.river.RiverMarshaller.doWriteObject(RiverMarshaller.java:271) at org.jboss.marshalling.AbstractObjectOutput.writeObject(AbstractObjectOutput.java:58) at org.jboss.marshalling.AbstractMarshaller.writeObject(AbstractMarshaller.java:116) at org.wildfly.httpclient.ejb.HttpEJBReceiver.marshalEJBRequest(HttpEJBReceiver.java:401) at org.wildfly.httpclient.ejb.HttpEJBReceiver.lambda$processInvocation$1(HttpEJBReceiver.java:197) at org.wildfly.httpclient.common.HttpTargetContext$2.lambda$completed$0(HttpTargetContext.java:351) at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377) at org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1282) at java.base/java.lang.Thread.run(Thread.java:1595) Caused by: an exception which occurred: in field org.jboss.as.test.integration.ejb.remote.contextdata.UseCaseValidator$UseCase.phaseContextDataConsumer in object org.jboss.as.test.integration.ejb.remote.contextdata.UseCaseValidator$4@460cd4f2 in field org.jboss.as.test.integration.ejb.remote.contextdata.UseCaseValidator.useCases in object org.jboss.as.test.integration.ejb.remote.contextdata.UseCaseValidator@41c7c6d4 in object org.jboss.as.test.integration.ejb.remote.contextdata.UseCaseValidator@41c7c6d4
It's possible this is a Semeru bug, as I don't see what I understand to be hidden classes in the relevant code. AIUI VM implementors may be moving some anonymous classes toward using hidden classes, so that may be what we are seeing. Or perhaps somewhere in the JBoss Marshalling code there's a hidden class.
The initial focus here should not be on just getting the tests to pass; e.g. by refactoring to get rid of anonymous classes. The focus should be on understanding what is happening here and spreading knowledge in case this is an early symptom of something we may see elsewhere. Only when that is done should the focus shift to getting the tests to pass.
If it's a Semeru bug please track it so you can work with Ken Wills to get ci.wildfly.org updated to use the Semeru 21 release that fixes the bug.
ropalka FYI.
- is caused by
-
JBMAR-260 Java SE 21+ incompatibility from using Unsafe.objectFieldOffset for hidden classes
-
- Resolved
-