Uploaded image for project: 'James Server'
  1. James Server
  2. JAMES-2350

JPA max quota manager is not thread safe

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • master
    • master
    • IMAPServer, jpa
    • None

    Description

      `Yeikel Santana` encountered the following error:

      15:24:39.824 [ERROR] o.a.j.i.p.b.AbstractChainedProcessor - Error while
      processing IMAP request
      
      org.apache.openjpa.persistence.PersistenceException: Multiple concurrent
      threads attempted to access a single broker. By default brokers are not
      thread safe; if you require and/or intend a broker to be accessed by more
      than one thread, set the openjpa.Multithreaded property to true to override
      the default behavior.
      
      at
      org.apache.openjpa.kernel.BrokerImpl.endOperation(BrokerImpl.java:1987)
      
      at
      org.apache.openjpa.kernel.BrokerImpl.isActive(BrokerImpl.java:1935)
      
      at
      org.apache.openjpa.kernel.DelegatingBroker.isActive(DelegatingBroker.java:47
      5)
      
      at
      org.apache.openjpa.persistence.EntityManagerImpl.isActive(EntityManagerImpl.
      java:678)
      
      at
      org.apache.openjpa.persistence.PersistenceExceptions$2.translate(Persistence
      Exceptions.java:74)
      
      at
      org.apache.openjpa.kernel.DelegatingBroker.translate(DelegatingBroker.java:1
      06)
      
      at
      org.apache.openjpa.kernel.DelegatingBroker.newObjectId(DelegatingBroker.java
      :317)
      
      at
      org.apache.openjpa.persistence.EntityManagerImpl.find(EntityManagerImpl.java
      :487)
      
      at
      org.apache.james.mailbox.jpa.quota.JPAPerUserMaxQuotaManager.getMaxMessage(J
      PAPerUserMaxQuotaManager.java:104)
      
      at
      org.apache.james.mailbox.store.quota.StoreQuotaManager.getMessageQuota(Store
      QuotaManager.java:52)
      
      at
      org.apache.james.imap.processor.GetQuotaRootProcessor.doProcess(GetQuotaRoot
      Processor.java:81)
      
      at
      org.apache.james.imap.processor.GetQuotaRootProcessor.doProcess(GetQuotaRoot
      Processor.java:53)
      
      at
      org.apache.james.imap.processor.AbstractMailboxProcessor.doProcess(AbstractM
      ailboxProcessor.java:110)
      
      at
      org.apache.james.imap.processor.AbstractMailboxProcessor.process(AbstractMai
      lboxProcessor.java:97)
      
      at
      org.apache.james.imap.processor.AbstractMailboxProcessor.doProcess(AbstractM
      ailboxProcessor.java:89)
      
      at
      org.apache.james.imap.processor.AbstractMailboxProcessor.doProcess(AbstractM
      ailboxProcessor.java:71)
      
      at
      org.apache.james.imap.processor.base.AbstractChainedProcessor.process(Abstra
      ctChainedProcessor.java:65)
      
      at
      org.apache.james.imap.processor.base.AbstractChainedProcessor.process(Abstra
      ctChainedProcessor.java:74)
      
      at
      org.apache.james.imapserver.netty.ImapChannelUpstreamHandler.messageReceived
      (ImapChannelUpstreamHandler.java:196)
      
      at
      org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleCh
      annelUpstreamHandler.java:70)
      
      at
      org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPi
      peline.java:564)
      
      at
      org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.
      sendUpstream(DefaultChannelPipeline.java:791)
      
      at
      org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:296)
      
      at
      org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceive
      d(FrameDecoder.java:462)
      
      at
      org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.jav
      a:443)
      
      at
      org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecode
      r.java:303)
      
      at
      org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleCh
      annelUpstreamHandler.java:70)
      
      at
      org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPi
      peline.java:564)
      
      at
      org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.
      sendUpstream(DefaultChannelPipeline.java:791)
      
      at
      org.jboss.netty.handler.execution.ChannelUpstreamEventRunnable.doRun(Channel
      UpstreamEventRunnable.java:43)
      
      at
      org.jboss.netty.handler.execution.ChannelEventRunnable.run(ChannelEventRunna
      ble.java:67)
      
      at
      org.jboss.netty.handler.execution.OrderedMemoryAwareThreadPoolExecutor$Child
      Executor.run(OrderedMemoryAwareThreadPoolExecutor.java:314)
      
      at
      java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:11
      49)
      
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:6
      24)
      
      at java.lang.Thread.run(Thread.java:748)
      

      We need to issue parallel IMAP `GETQUOTAROOT` calls on top of JPA James Server and ensure that we reproduce this bug.

      Then we need to solve it.

      Then ensure our test pass.

      Attachments

        Activity

          People

            Unassigned Unassigned
            btellier Benoit Tellier
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: