Details
-
Bug
-
Resolution: Done
-
Major
-
13.0.6.Final
-
None
Description
EventLogListener uses an ArrayBlockingQueue that may block when 2 threads use it concurrently. If the blocked thread is a client Netty thread, BlockHound throws an exception and prevents the event from being added.
java.lang.AssertionError: Blocking call! jdk.internal.misc.Unsafe#park on thread Thread[HotRodEventsTest-Client-131-1,5,main] at org.infinispan.util.CoreTestBlockHoundIntegration.lambda$applyTo$0(CoreTestBlockHoundIntegration.java:55) at reactor.blockhound.BlockHound$Builder.lambda$install$8(BlockHound.java:427) at reactor.blockhound.BlockHoundRuntime.checkBlocking(BlockHoundRuntime.java:89) at java.base/jdk.internal.misc.Unsafe.park(Unsafe.java) at java.base/java.util.concurrent.locks.LockSupport.park(LockSupport.java:194) at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:885) at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireQueued(AbstractQueuedSynchronizer.java:917) at java.base/java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(AbstractQueuedSynchronizer.java:1240) at java.base/java.util.concurrent.locks.ReentrantLock.lock(ReentrantLock.java:267) at java.base/java.util.concurrent.ArrayBlockingQueue.offer(ArrayBlockingQueue.java:341) at java.base/java.util.AbstractQueue.add(AbstractQueue.java:95) at java.base/java.util.concurrent.ArrayBlockingQueue.add(ArrayBlockingQueue.java:326) at org.infinispan.server.hotrod.event.EventLogListener.onModified(EventLogListener.java:77) at org.infinispan.server.hotrod.test.ClientHandler.channelRead(HotRodClient.java:1158) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
The test eventually times out waiting for the event that was not added:
java.lang.AssertionError: at org.infinispan.server.hotrod.event.EventLogListener.expectEvent(EventLogListener.java:146) at org.infinispan.server.hotrod.event.EventLogListener.expectSingleEvent(EventLogListener.java:140) at org.infinispan.server.hotrod.event.EventLogListener.expectOnlyModifiedEvent(EventLogListener.java:128) at org.infinispan.server.hotrod.event.HotRodEventsTest.lambda$testModifiedEvent$1(HotRodEventsTest.java:42)
The same problem happens with the other test methods in HotRodEventsTest: testModifiedEvent, testRemovedEvent etc.