Hi,
we just ran into a deadlock in OpenJPA. We do use `openjpa.Multithreaded=true` (as per examples from
James deployments). Threaddump below (full:
https://gist.github.com/woj-tek/f4571031f57e4e70de2bda56c460f61d).
Andy ideas? Missing blocking in reactor somewhere maybe (very wild guess)?
```
Found one Java-level deadlock:
=============================
"parallel-1":
waiting for ownable synchronizer 0x00000000ed900438, (a
java.util.concurrent.locks.ReentrantLock$NonfairSync),
which is held by "imapserver-ssl-io-1"
"imapserver-ssl-io-1":
waiting for ownable synchronizer 0x00000000ed980198, (a
java.util.concurrent.locks.ReentrantLock$NonfairSync),
which is held by "parallel-1"
Java stack information for the threads listed above:
===================================================
"parallel-1":
at jdk.internal.misc.Unsafe.park(java.base@21.0.3/Native Method)
- parking to wait for <0x00000000ed900438> (a
java.util.concurrent.locks.ReentrantLock$NonfairSync)
at java.util.concurrent.locks.LockSupport.park(java.base@21.0.3/Unknown
Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@21.0.3/Unknown
Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@21.0.3/Unknown
Source)
at
java.util.concurrent.locks.ReentrantLock$Sync.lock(java.base@21.0.3/Unknown
Source)
at
java.util.concurrent.locks.ReentrantLock.lock(java.base@21.0.3/Unknown Source)
at org.apache.openjpa.kernel.BrokerImpl.lock(BrokerImpl.java:4655)
at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager$RefCountConnection.close(JDBCStoreManager.java:1653)
at
org.apache.openjpa.jdbc.sql.ResultSetResult.close(ResultSetResult.java:205)
at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:688)
at
org.apache.openjpa.kernel.DelegatingStoreManager.load(DelegatingStoreManager.java:129)
at
org.apache.openjpa.kernel.ROPStoreManager.load(ROPStoreManager.java:82)
at
org.apache.openjpa.kernel.StateManagerImpl.loadFields(StateManagerImpl.java:3278)
at
org.apache.openjpa.kernel.StateManagerImpl.loadField(StateManagerImpl.java:3358)
at
org.apache.openjpa.kernel.StateManagerImpl.beforeAccessField(StateManagerImpl.java:1747)
at
org.apache.openjpa.kernel.StateManagerImpl.accessingField(StateManagerImpl.java:1678)
at
org.apache.james.mailbox.jpa.mail.model.openjpa.JPAMailboxMessage.pcGetbody(JPAMailboxMessage.java)
at
org.apache.james.mailbox.jpa.mail.model.openjpa.JPAMailboxMessage.getBodyContent(JPAMailboxMessage.java:109)
at
org.apache.james.mailbox.jpa.mail.model.openjpa.AbstractJPAMailboxMessage.getFullContent(AbstractJPAMailboxMessage.java:520)
at
org.apache.james.mailbox.store.streaming.InputStreamContent.getInputStream(InputStreamContent.java:64)
at
org.apache.james.imap.processor.fetch.ContentBodyElement.getInputStream(ContentBodyElement.java:63)
at
org.apache.james.imap.processor.fetch.PartialFetchBodyElement.getInputStream(PartialFetchBodyElement.java:65)
at
org.apache.james.imapserver.netty.ChannelImapResponseWriter.write(ChannelImapResponseWriter.java:84)
at
org.apache.james.imap.encode.base.ImapResponseComposerImpl.literal(ImapResponseComposerImpl.java:320)
at
org.apache.james.imap.encode.FetchResponseEncoder.encodeBodyElements(FetchResponseEncoder.java:281)
at
org.apache.james.imap.encode.FetchResponseEncoder.encode(FetchResponseEncoder.java:96)
at
org.apache.james.imap.encode.FetchResponseEncoder.encode(FetchResponseEncoder.java:51)
at
org.apache.james.imap.encode.main.DefaultImapEncoderFactory$DefaultImapEncoder.encode(DefaultImapEncoderFactory.java:83)
at
org.apache.james.imap.main.ResponseEncoder.respond(ResponseEncoder.java:43)
at
org.apache.james.imap.processor.fetch.FetchProcessor$FetchSubscriber.onNext(FetchProcessor.java:100)
at
org.apache.james.imap.processor.fetch.FetchProcessor$FetchSubscriber.onNext(FetchProcessor.java:80)
at
reactor.core.publisher.StrictSubscriber.onNext(StrictSubscriber.java:89)
at
reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.innerNext(FluxConcatMapNoPrefetch.java:258)
- locked <0x00000000ed900798> (a
reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber)
at
reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:863)
at
reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.complete(MonoIgnoreThen.java:293)
at
reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onNext(MonoIgnoreThen.java:188)
at
reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:237)
at
reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:204)
at
reactor.core.publisher.MonoIgnoreElements$IgnoreElementsSubscriber.onComplete(MonoIgnoreElements.java:89)
at
reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onComplete(FluxPeekFuseable.java:277)
at
reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2573)
at
reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.request(FluxPeekFuseable.java:144)
at
reactor.core.publisher.MonoIgnoreElements$IgnoreElementsSubscriber.onSubscribe(MonoIgnoreElements.java:72)
at
reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onSubscribe(FluxPeekFuseable.java:178)
at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:55)
at reactor.core.publisher.Mono.subscribe(Mono.java:4512)
at
reactor.core.publisher.MonoIgnorePublisher.subscribe(MonoIgnorePublisher.java:57)
at
reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:264)
at
reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51)
at
reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.onNext(FluxConcatMapNoPrefetch.java:206)
at
reactor.core.publisher.FluxFilter$FilterSubscriber.onNext(FluxFilter.java:113)
at
reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.innerNext(FluxConcatMapNoPrefetch.java:258)
- locked <0x00000000ed900880> (a
reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber)
at
reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:863)
at
reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:129)
at
reactor.core.publisher.FluxPublishOn$PublishOnSubscriber.runAsync(FluxPublishOn.java:440)
at
reactor.core.publisher.FluxPublishOn$PublishOnSubscriber.run(FluxPublishOn.java:527)
at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:84)
at reactor.core.scheduler.WorkerTask.call(WorkerTask.java:37)
at java.util.concurrent.FutureTask.run(java.base@21.0.3/Unknown Source)
at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(java.base@21.0.3/Unknown
Source)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@21.0.3/Unknown
Source)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@21.0.3/Unknown
Source)
at java.lang.Thread.runWith(java.base@21.0.3/Unknown Source)
at java.lang.Thread.run(java.base@21.0.3/Unknown Source)
"imapserver-ssl-io-1":
at jdk.internal.misc.Unsafe.park(java.base@21.0.3/Native Method)
- parking to wait for <0x00000000ed980198> (a
java.util.concurrent.locks.ReentrantLock$NonfairSync)
at java.util.concurrent.locks.LockSupport.park(java.base@21.0.3/Unknown
Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@21.0.3/Unknown
Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquire(java.base@21.0.3/Unknown
Source)
at
java.util.concurrent.locks.ReentrantLock$Sync.lock(java.base@21.0.3/Unknown
Source)
at
java.util.concurrent.locks.ReentrantLock.lock(java.base@21.0.3/Unknown Source)
at
org.apache.openjpa.kernel.StateManagerImpl.lock(StateManagerImpl.java:3553)
at
org.apache.openjpa.kernel.StateManagerImpl.assignObjectId(StateManagerImpl.java:597)
at
org.apache.openjpa.kernel.StateManagerImpl.fetchObjectId(StateManagerImpl.java:1617)
at
org.apache.openjpa.kernel.DetachedStateManager.<init>(DetachedStateManager.java:87)
at
org.apache.openjpa.kernel.DetachManager.detachInternal(DetachManager.java:469)
at
org.apache.openjpa.kernel.DetachManager.detachAll(DetachManager.java:333)
at
org.apache.openjpa.kernel.BrokerImpl.detachAllInternal(BrokerImpl.java:3608)
at org.apache.openjpa.kernel.BrokerImpl.free(BrokerImpl.java:4579)
at org.apache.openjpa.kernel.BrokerImpl.close(BrokerImpl.java:4566)
at
org.apache.openjpa.kernel.DelegatingBroker.close(DelegatingBroker.java:1508)
at
org.apache.openjpa.persistence.EntityManagerImpl.close(EntityManagerImpl.java:1598)
at
org.apache.james.backends.jpa.EntityManagerUtils.safelyClose(EntityManagerUtils.java:40)
at
org.apache.james.mailbox.jpa.JPATransactionalMapper.endRequest(JPATransactionalMapper.java:91)
at
org.apache.james.mailbox.store.MailboxSessionMapperFactory.endProcessingRequest(MailboxSessionMapperFactory.java:143)
at
org.apache.james.mailbox.store.StoreMailboxManager.endProcessingRequest(StoreMailboxManager.java:915)
at
org.apache.james.mailbox.MailboxManager.lambda$manageProcessing$10(MailboxManager.java:436)
at
org.apache.james.mailbox.MailboxManager$$Lambda/0x00007f4b3ca926e8.run(Unknown
Source)
at
org.apache.james.mailbox.MailboxManager$$Lambda/0x00007f4b3c408000.accept(Unknown
Source)
at
reactor.core.publisher.MonoUsing$MonoUsingSubscriber.cleanup(MonoUsing.java:191)
at
reactor.core.publisher.MonoUsing$MonoUsingSubscriber.cancel(MonoUsing.java:185)
at
reactor.core.publisher.MonoUsing$MonoUsingSubscriber.cancel(MonoUsing.java:183)
at
reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.cancel(MonoIgnoreThen.java:144)
at
reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.cancel(FluxContextWrite.java:141)
at
reactor.core.publisher.FluxDoOnEach$DoOnEachSubscriber.cancel(FluxDoOnEach.java:113)
at
reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.cancel(FluxContextWrite.java:141)
at
reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.cancel(FluxDoFinally.java:134)
at
reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.cancel(MonoPeekTerminal.java:144)
at
reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.cancel(FluxDoFinally.java:134)
at
reactor.core.publisher.LambdaMonoSubscriber.dispose(LambdaMonoSubscriber.java:217)
at
org.apache.james.imapserver.netty.NettyImapSession$$Lambda/0x00007f4b3ca41b90.accept(Unknown Source)
at java.util.Optional.ifPresent(java.base@21.0.3/Unknown Source)
at
org.apache.james.imapserver.netty.NettyImapSession.cancelOngoingProcessing(NettyImapSession.java:123)
at
org.apache.james.imapserver.netty.ImapChannelUpstreamHandler$$Lambda/0x00007f4b3ca41968.accept(Unknown
Source)
at java.util.Optional.ifPresent(java.base@21.0.3/Unknown Source)
at
org.apache.james.imapserver.netty.ImapChannelUpstreamHandler.channelInactive(ImapChannelUpstreamHandler.java:275)
at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262)
at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248)
at
io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:241)
at
io.netty.handler.codec.ByteToMessageDecoder.channelInputClosed(ByteToMessageDecoder.java:411)
at
io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:376)
at
org.apache.james.imapserver.netty.ImapRequestFrameDecoder.channelInactive(ImapRequestFrameDecoder.java:101)
at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262)
at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248)
at
io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:241)
at
io.netty.handler.stream.ChunkedWriteHandler.channelInactive(ChunkedWriteHandler.java:137)
at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262)
at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248)
at
io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:241)
at
io.netty.handler.codec.ByteToMessageDecoder.channelInputClosed(ByteToMessageDecoder.java:411)
at
io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:376)
at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262)
at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248)
at
io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:241)
at
io.netty.channel.ChannelInboundHandlerAdapter.channelInactive(ChannelInboundHandlerAdapter.java:81)
at
io.netty.handler.timeout.IdleStateHandler.channelInactive(IdleStateHandler.java:277)
at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262)
at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248)
at
io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:241)
at
io.netty.handler.codec.ByteToMessageDecoder.channelInputClosed(ByteToMessageDecoder.java:411)
at
io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:376)
at io.netty.handler.ssl.SslHandler.channelInactive(SslHandler.java:1174)
at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262)
at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248)
at
io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:241)
at
io.netty.channel.DefaultChannelPipeline$HeadContext.channelInactive(DefaultChannelPipeline.java:1405)
at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262)
at
io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248)
at
io.netty.channel.DefaultChannelPipeline.fireChannelInactive(DefaultChannelPipeline.java:901)
at
io.netty.channel.AbstractChannel$AbstractUnsafe$7.run(AbstractChannel.java:813)
at
io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:174)
at
io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:167)
at
io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500)
at
io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:995)
at
io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at java.lang.Thread.runWith(java.base@21.0.3/Unknown Source)
at java.lang.Thread.run(java.base@21.0.3/Unknown Source)
```
--
Wojtek
---------------------------------------------------------------------
To unsubscribe, e-mail: server-user-unsubscr...@james.apache.org
For additional commands, e-mail: server-user-h...@james.apache.org