[ 
https://issues.apache.org/jira/browse/JAMES-2047?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Tellier Benoit updated JAMES-2047:
----------------------------------
    Description: 
INBOX issues GetMessagesList and GetMailboxes calls in parallel, Leading to 
concurrency upon mailboxes creation.

We might have data races with the Read before Write strategy, leading to trial 
to create mailboxes ending up raising *MailboxExistException*. These 
exceptions, not harmful, results in *500* errors at the JMAP level.

{code:java}
LOGGER: org.eclipse.jetty.servlet.ServletHandler
(That's why it is a 500 error)

java.lang.RuntimeException: Mailbox with 
name=#private:tmht...@linagora.com:Outbox already exists. at 
com.google.common.base.Throwables.propagate(Throwables.java:160) 
 at 
org.apache.james.jmap.DefaultMailboxesProvisioningFilter.createMailbox(DefaultMailboxesProvisioningFilter.java:106)
 
 at 
org.apache.james.jmap.DefaultMailboxesProvisioningFilter.lambda$createDefaultMailboxes$127(DefaultMailboxesProvisioningFilter.java:87)
 
 at 
org.apache.james.jmap.DefaultMailboxesProvisioningFilter$$Lambda$275/728763676.accept(Unknown
 Source) 
 at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) 
 at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) 
 at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) 
at java.util.Iterator.forEachRemaining(Iterator.java:116) 
 at 
java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
 at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:512) 
 at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:502)
 at 
java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) 
 at 
java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
 
 at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) 
 at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) 
 at 
org.apache.james.jmap.DefaultMailboxesProvisioningFilter.createDefaultMailboxes(DefaultMailboxesProvisioningFilter.java:87)
 
 at 
org.apache.james.jmap.DefaultMailboxesProvisioningFilter.createMailboxesIfNeeded(DefaultMailboxesProvisioningFilter.java:74)
{code}

We need to catch and swallow this exception (the mailbox is created, that is 
what we want). We can log it with the INFO level to keep a track of this.

  was:
INBOX issues GetMessagesList and GetMailboxes calls in parallel, Leading to 
concurrency upon mailboxes creation.

We might have data races with the Read before Write strategy, leading to trial 
to create mailboxes ending up raising *MailboxExistException*. These 
exceptions, not harmful, results in *500* errors at the JMAP level.

{code:java}
LOGGER: org.eclipse.jetty.servlet.ServletHandler
(That's why it is a 500 error)

java.lang.RuntimeException: Mailbox with 
name=#private:tmht...@linagora.com:Outbox already exists. at 
com.google.common.base.Throwables.propagate(Throwables.java:160) 
 at 
org.apache.james.jmap.DefaultMailboxesProvisioningFilter.createMailbox(DefaultMailboxesProvisioningFilter.java:106)
 
 at 
org.apache.james.jmap.DefaultMailboxesProvisioningFilter.lambda$createDefaultMailboxes$127(DefaultMailboxesProvisioningFilter.java:87)
 
 at 
org.apache.james.jmap.DefaultMailboxesProvisioningFilter$$Lambda$275/728763676.accept(Unknown
 Source) 
 at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) 
 at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) 
 at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) 
at java.util.Iterator.forEachRemaining(Iterator.java:116) 
at 
java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
 at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:512) 
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:502)
 at 
java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) 
at 
java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
 
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) 
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) 
at 
org.apache.james.jmap.DefaultMailboxesProvisioningFilter.createDefaultMailboxes(DefaultMailboxesProvisioningFilter.java:87)
 
at 
org.apache.james.jmap.DefaultMailboxesProvisioningFilter.createMailboxesIfNeeded(DefaultMailboxesProvisioningFilter.java:74)
{code}

We need to catch and swallow this exception (the mailbox is created, that is 
what we want). We can log it with the INFO level to keep a track of this.


> 500 errors upon JMAP mailbox provisionning
> ------------------------------------------
>
>                 Key: JAMES-2047
>                 URL: https://issues.apache.org/jira/browse/JAMES-2047
>             Project: James Server
>          Issue Type: Bug
>          Components: JMAP
>            Reporter: Tellier Benoit
>            Assignee: Antoine Duprat
>
> INBOX issues GetMessagesList and GetMailboxes calls in parallel, Leading to 
> concurrency upon mailboxes creation.
> We might have data races with the Read before Write strategy, leading to 
> trial to create mailboxes ending up raising *MailboxExistException*. These 
> exceptions, not harmful, results in *500* errors at the JMAP level.
> {code:java}
> LOGGER: org.eclipse.jetty.servlet.ServletHandler
> (That's why it is a 500 error)
> java.lang.RuntimeException: Mailbox with 
> name=#private:tmht...@linagora.com:Outbox already exists. at 
> com.google.common.base.Throwables.propagate(Throwables.java:160) 
>  at 
> org.apache.james.jmap.DefaultMailboxesProvisioningFilter.createMailbox(DefaultMailboxesProvisioningFilter.java:106)
>  
>  at 
> org.apache.james.jmap.DefaultMailboxesProvisioningFilter.lambda$createDefaultMailboxes$127(DefaultMailboxesProvisioningFilter.java:87)
>  
>  at 
> org.apache.james.jmap.DefaultMailboxesProvisioningFilter$$Lambda$275/728763676.accept(Unknown
>  Source) 
>  at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184) 
>  at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175) 
>  at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) 
> at java.util.Iterator.forEachRemaining(Iterator.java:116) 
>  at 
> java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
>  at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:512) 
>  at 
> java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:502)
>  at 
> java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) 
>  at 
> java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
>  
>  at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) 
>  at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) 
>  at 
> org.apache.james.jmap.DefaultMailboxesProvisioningFilter.createDefaultMailboxes(DefaultMailboxesProvisioningFilter.java:87)
>  
>  at 
> org.apache.james.jmap.DefaultMailboxesProvisioningFilter.createMailboxesIfNeeded(DefaultMailboxesProvisioningFilter.java:74)
> {code}
> We need to catch and swallow this exception (the mailbox is created, that is 
> what we want). We can log it with the INFO level to keep a track of this.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to