Author: eric
Date: Sun Apr 14 13:53:51 2013
New Revision: 1467779
URL: http://svn.apache.org/r1467779
Log:
Lazily instanciate MessageManager to lower CPU pressure, patch by Andrzej Rusin
(IMAP-371)
Modified:
james/protocols/trunk/imap/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
Modified:
james/protocols/trunk/imap/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/imap/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java?rev=1467779&r1=1467778&r2=1467779&view=diff
==============================================================================
---
james/protocols/trunk/imap/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
(original)
+++
james/protocols/trunk/imap/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
Sun Apr 14 13:53:51 2013
@@ -66,7 +66,6 @@ import org.apache.james.mailbox.model.Se
abstract public class AbstractMailboxProcessor<M extends ImapRequest> extends
AbstractChainedProcessor<M> {
private final MailboxManager mailboxManager;
-
private final StatusResponseFactory factory;
public AbstractMailboxProcessor(final Class<M> acceptableClass, final
ImapProcessor next, final MailboxManager mailboxManager, final
StatusResponseFactory factory) {
@@ -75,9 +74,6 @@ abstract public class AbstractMailboxPro
this.factory = factory;
}
- /*
- *
- */
protected final void doProcess(final M acceptableMessage, final Responder
responder, final ImapSession session) {
final M request = acceptableMessage;
process(request, responder, session);
@@ -191,20 +187,22 @@ abstract public class AbstractMailboxPro
responder.respond(new VanishedResponse(uidRange, false));
}
-
private void addFlagsResponses(final ImapSession session, final
SelectedMailbox selected, final ImapProcessor.Responder responder, boolean
useUid) {
-
try {
- final MessageManager mailbox = getMailbox(session, selected);
+
+ // To be lazily initialized only if needed, which is in minority
of cases.
+ MessageManager messageManager = null;
+
final MailboxSession mailboxSession =
ImapSessionUtils.getMailboxSession(session);
- // Check ifwe need to send a FLAGS and PERMANENTFLAGS response
before the FETCH response
+ // Check if we need to send a FLAGS and PERMANENTFLAGS response
before the FETCH response
// This is the case if some new flag/keyword was used
// See IMAP-303
if (selected.hasNewApplicableFlags()) {
+ messageManager = getMailbox(session, selected);
flags(responder, selected);
- permanentFlags(responder, mailbox.getMetaData(false,
mailboxSession, MessageManager.MetaData.FetchGroup.NO_COUNT), selected);
+ permanentFlags(responder, messageManager.getMetaData(false,
mailboxSession, MessageManager.MetaData.FetchGroup.NO_COUNT), selected);
selected.resetNewApplicableFlags();
}
@@ -212,15 +210,19 @@ abstract public class AbstractMailboxPro
if (!flagUpdateUids.isEmpty()) {
Iterator<MessageRange> ranges =
MessageRange.toRanges(flagUpdateUids).iterator();
while(ranges.hasNext()) {
- addFlagsResponses(session, selected, responder, useUid,
ranges.next(), mailbox, mailboxSession);
+ if (messageManager == null)
+ messageManager = getMailbox(session, selected);
+ addFlagsResponses(session, selected, responder, useUid,
ranges.next(), messageManager, mailboxSession);
}
}
+
} catch (MailboxException e) {
handleResponseException(responder, e,
HumanReadableText.FAILURE_TO_LOAD_FLAGS, session);
}
- }
+ }
+
protected void addFlagsResponses(final ImapSession session, final
SelectedMailbox selected, final ImapProcessor.Responder responder, boolean
useUid, MessageRange messageSet, MessageManager mailbox, MailboxSession
mailboxSession) throws MailboxException {
final MessageResultIterator it = mailbox.getMessages(messageSet,
FetchGroupImpl.MINIMAL, mailboxSession);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]