[
https://issues.apache.org/jira/browse/IMAP-371?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13636300#comment-13636300
]
Andrzej Rusin commented on IMAP-371:
------------------------------------
Hi Eric,
I looked at it and I think that SelectedMailbox can hold the Mailbox instance
cached and ready to use. Here's why:
- SelectedMailboxImpl is notified of MailboxDeletion and MailboxRenamed, so I
think the cached instance will not become stale if we act accordingly. In fact
there is already some handling of Deletion and Rename of the mailbox and it
would just need to be enriched a bit.
Maybe deselect() method would need to process it too by forgetting the cached
instance? Not sure.
The SelectedMailbox is available to the commands via session.getSelected().
Needed API change would be addition of MessageManager getMailbox(Mailbox
mailbox, MailboxSession session) to MessageManager.
In StoreMailboxManager it can be just implemented with refactored out last 3
(signifacant) lines of MessageManager getMailbox(MailboxPath mailboxPath,
MailboxSession session)
This way getting the MessageManager (called mailbox in the code) stops
involving any DB access, and is just a simple local objects manipulation.
Does it make any sense?
> MailboxManager::getMailbox called very often
> --------------------------------------------
>
> Key: IMAP-371
> URL: https://issues.apache.org/jira/browse/IMAP-371
> Project: James Imap
> Issue Type: Improvement
> Components: Processor
> Affects Versions: 0.3
> Reporter: Andrzej Rusin
> Assignee: Eric Charles
>
> MailboxManager::getMailbox(MailboxPath mailboxPath, MailboxSession session)
> is getting called extremely often.
> On my custom RDBMS-based Mailstore implementation it is the biggest hot spot.
> I had to resort to caching the return value of it on Memcache, but even after
> that it uses up around 15% of spent CPU time. It is far too much in my
> opinion. (before I started caching it, fully indexed RDBMS getting of the
> mailbox was taking more than 50% of the global RDBMS load).
> My suspect is the method AbstractMailboxProcessor::addFlagsResponses(final
> ImapSession session, final SelectedMailbox selected, final
> ImapProcessor.Responder responder, boolean useUid).
> It gets the mailbox from MessageManager each time, even if it may be not
> needed.
> This method is called in many CommandProcessors during the
> unsolicitedResponses phase.
> After I am able to really profile and confirm that it's the core of problem,
> I will provide a patch.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]