When running JCK 7 activation tests concurrently on a fast SPARC machine we noticed test failures due to rmid daemon unexpected shutdown caused by the ConcurrentModificationException exception.
Here is rmid output before it crashes:
===========
java.io.IOException: snapshot failed with exception of type: java.util.ConcurrentModificationException, message was: null
at sun.rmi.log.ReliableLog.snapshot(ReliableLog.java:383)
at sun.rmi.server.Activation.addLogRecord(Activation.java:1462)
at sun.rmi.server.Activation.access$700(Activation.java:135)
at sun.rmi.server.Activation$GroupEntry.registerObject(Activation.java:890)
at sun.rmi.server.Activation$ActivationSystemImpl.registerObject(Activation.java:469)
at sun.reflect.GeneratedMethodAccessor8.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:613)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322)
at sun.rmi.transport.Transport$1.run(Transport.java:177)
at sun.rmi.transport.Transport$1.run(Transport.java:174)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:717)
===========
Here is the first failing test stack trace:
=======
java.rmi.activation.ActivationException: log snapshot failed; nested exception is:
java.io.IOException: snapshot failed with exception of type: java.util.ConcurrentModificationException, message was: null
at sun.rmi.server.Activation.addLogRecord(Activation.java:1475)
at sun.rmi.server.Activation.access$700(Activation.java:135)
at sun.rmi.server.Activation$GroupEntry.registerObject(Activation.java:890)
at sun.rmi.server.Activation$ActivationSystemImpl.registerObject(Activation.java:469)
at sun.reflect.GeneratedMethodAccessor8.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:613)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322)
at sun.rmi.transport.Transport$1.run(Transport.java:177)
at sun.rmi.transport.Transport$1.run(Transport.java:174)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:717)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:273)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:251)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:160)
at sun.rmi.server.Activation$ActivationSystemImpl_Stub.registerObject(Unknown Source)
at java.rmi.activation.Activatable.exportObject(Activatable.java:427)
at java.rmi.activation.Activatable.exportObject(Activatable.java:346)
at java.rmi.activation.Activatable.<init>(Activatable.java:105)
at javasoft.sqe.tests.api.java.rmi.activation.TestObject1Impl.<init>(TestObject1Impl.java:46)
at javasoft.sqe.tests.api.java.rmi.activation.ActivationGroup.inactivate4Tests.ActivationGroup2006(inactivate4Tests.java:51)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:613)
at javasoft.sqe.javatest.lib.MultiTest.invokeTestCase(MultiTest.java:406)
at javasoft.sqe.tests.api.java.rmi.activation.ActivationGroupTest.invokeTestCase(ActivationGroupTest.java:66)
at javasoft.sqe.javatest.lib.MultiTest.run(MultiTest.java:195)
at javasoft.sqe.tests.api.java.rmi.activation.ActivationTest.run(ActivationTest.java:116)
at javasoft.sqe.javatest.lib.MultiTest.run(MultiTest.java:127)
at javasoft.sqe.tests.api.java.rmi.activation.ActivationGroup.inactivate4Tests.main(inactivate4Tests.java:38)
Caused by: java.io.IOException: snapshot failed with exception of type: java.util.ConcurrentModificationException, message was: null
at sun.rmi.log.ReliableLog.snapshot(ReliableLog.java:383)
at sun.rmi.server.Activation.addLogRecord(Activation.java:1462)
at sun.rmi.server.Activation.access$700(Activation.java:135)
at sun.rmi.server.Activation$GroupEntry.registerObject(Activation.java:890)
at sun.rmi.server.Activation$ActivationSystemImpl.registerObject(Activation.java:469)
at sun.reflect.GeneratedMethodAccessor8.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:613)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322)
at sun.rmi.transport.Transport$1.run(Transport.java:177)
at sun.rmi.transport.Transport$1.run(Transport.java:174)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:717)
======
.JTR file and archived rmid logging directory are attached.
After the first test failure the rmid daemon crashes that cause other failures.
It's reproducible on mumble-new.sfbay one time per 2 - 10 JCK runs.
Here is a sample command for starting pre-configured JCK 7 test suite in loop:
ag153348@mumble-new$ for i in {0..9}; do echo $i; /java/re/jdk/7/latest/binaries/solaris-sparc/bin/java -jar /java/re/jck/7/qac/latest/binaries/JCK-runtime-7/lib/jtjck.jar -w:work$i api/java_rmi/activation; done
0
Oct 29, 2009 3:28:21 AM Harness starting test run with configuration "jck_runtime_solaris"...
Oct 29, 2009 3:29:05 AM Finished executing all tests, wait for cleanup...
Oct 29, 2009 3:29:05 AM Harness done with cleanup from test run.
Test results: passed: 134; failed: 20
Results written to /home/ag153348/testing/work0.
Error: Some tests did not pass
By default on mumble-new.sfbay it runs tests with concurrency=20.