Benoit Tellier created JAMES-3888: ------------------------------------- Summary: Enforce sequetial ordering of IMAP requests for each channels Key: JAMES-3888 URL: https://issues.apache.org/jira/browse/JAMES-3888 Project: James Server Issue Type: Improvement Reporter: Benoit Tellier
Today IMAP requests are not executed in a sequencial order. If a MUA sends two requests at once, we are going to execute both in parallel. For instance sending `A1 SELECT INBOX\r\nA2 UID FETCH 1:100 (FLAGS)\r\n"` would result in: {code:java} 06:43:49.002 [INFO ] o.a.j.p.l.n.AbstractConfigurableAsyncServer - IMAP Service bound to: 0.0.0.0:0 06:43:49.061 [INFO ] o.a.j.p.l.n.AbstractConfigurableAsyncServer - IMAP Service is running on: interview1-HP-ProBook-440-G6 06:43:49.062 [INFO ] o.a.j.p.l.n.AbstractConfigurableAsyncServer - IMAP Service handler hello name is: interview1-HP-ProBook-440-G6 06:43:49.063 [INFO ] o.a.j.p.l.n.AbstractConfigurableAsyncServer - IMAP Service handler connection timeout is: 300 06:43:49.064 [INFO ] o.a.j.p.l.n.AbstractConfigurableAsyncServer - IMAP Service connection backlog is: 200 06:43:49.530 [INFO ] o.a.j.p.l.n.AbstractConfigurableAsyncServer - Init IMAP Service done 06:43:49.540 [DEBUG] o.a.j.m.s.StoreMailboxManager - createMailbox #private:u...@domain.org:INBOX 06:43:49.722 [DEBUG] o.a.j.m.s.StoreMailboxManager - Loaded mailbox #private:u...@domain.org:INBOX 06:43:50.192 [INFO ] o.a.j.i.n.ImapChannelUpstreamHandler - Connection established from 127.0.0.1 06:43:50.683 [DEBUG] o.a.j.i.d.m.DefaultImapDecoder - Got <tag>: Tag{value=a0} 06:43:50.683 [DEBUG] o.a.j.i.d.m.DefaultImapDecoder - Got <command>: LOGIN 06:43:50.706 [DEBUG] o.a.j.i.p.AbstractAuthProcessor - INBOX exists. No need to create it. 06:43:50.712 [DEBUG] o.a.j.i.d.m.DefaultImapDecoder - Got <tag>: Tag{value=A1} 06:43:50.713 [DEBUG] o.a.j.i.d.m.DefaultImapDecoder - Got <command>: SELECT 06:43:50.732 [DEBUG] o.a.j.m.s.StoreMailboxManager - Loaded mailbox #private:u...@domain.org:INBOX 06:43:50.835 [DEBUG] o.a.j.i.d.m.DefaultImapDecoder - Got <tag>: Tag{value=A2} 06:43:50.836 [DEBUG] o.a.j.i.d.m.DefaultImapDecoder - Got <command>: UID 06:43:50.837 [DEBUG] o.a.j.i.d.p.UidCommandParser - Got <command>: UID FETCH 06:43:50.859 [DEBUG] o.a.j.m.s.StoreMailboxManager - Loaded mailbox 1 #private:u...@domain.org:INBOX * 1 FETCH (FLAGS (\Recent) UID 1) [...] * 100 FETCH (FLAGS (\Recent) UID 100) A2 OK FETCH completed. * OK [MAILBOXID (1)] Ok * FLAGS (\Answered \Deleted \Draft \Flagged \Seen) * 137 EXISTS * 137 RECENT * OK [UIDVALIDITY 1396946597] UIDs valid * OK [UNSEEN 1] MailboxMessage 1 is first unseen * OK [PERMANENTFLAGS (\Answered \Deleted \Draft \Flagged \Seen \*)] Limited * OK [HIGHESTMODSEQ 137] Highest * OK [UIDNEXT 138] Predicted next UID A1 OK [READ-WRITE] SELECT completed. {code} We see that the FETCH request is incorrectly executed before the SELECT returns. This, is not acceptable. As IMAP is a connected protocols, requests are not independant from each others. We need a solution to enforce sequencial ordering of IMAP execution at the channel level. -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org