Author: rdonkin Date: Sun Nov 18 10:04:29 2007 New Revision: 596108 URL: http://svn.apache.org/viewvc?rev=596108&view=rev Log: Only flags should be stored in the flag event cache. Storing complete results holds too much in memory.
Modified: james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/wrapper/NumberStableSessionWrapper.java Modified: james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/wrapper/NumberStableSessionWrapper.java URL: http://svn.apache.org/viewvc/james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/wrapper/NumberStableSessionWrapper.java?rev=596108&r1=596107&r2=596108&view=diff ============================================================================== --- james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/wrapper/NumberStableSessionWrapper.java (original) +++ james/server/trunk/core-library/src/main/java/org/apache/james/mailboxmanager/wrapper/NumberStableSessionWrapper.java Sun Nov 18 10:04:29 2007 @@ -26,6 +26,8 @@ import java.util.TreeMap; import java.util.TreeSet; +import javax.mail.Flags; + import org.apache.james.mailboxmanager.GeneralMessageSet; import org.apache.james.mailboxmanager.MailboxListener; import org.apache.james.mailboxmanager.MailboxManagerException; @@ -138,16 +140,20 @@ return msnExpungedEvents; } - protected MessageResult[] buildMsnEvents(Collection collection,boolean expunge) + protected MessageResult[] buildMsnEvents(final Collection messageResults, + final boolean expunge) throws MailboxManagerException { - final MessageResult[] msnEvents = new MessageResult[collection.size()]; + final MessageResult[] msnEvents = new MessageResult[messageResults.size()]; int i=0; - for (Iterator iter = collection.iterator(); iter.hasNext();) { - MessageResult origMr = (MessageResult) iter.next(); - MessageResultImpl newMr = new MessageResultImpl(origMr); - newMr.setMsn(getNumberCache().getMsn(origMr.getUid())); + for (final Iterator iter = messageResults.iterator(); iter.hasNext();) { + final MessageResult original = (MessageResult) iter.next(); + final MessageResultImpl newMr = new MessageResultImpl(original); + final long uid = original.getUid(); + final UidToMsnBidiMap numberCache = getNumberCache(); + final int msn = numberCache.getMsn(uid); + newMr.setMsn(msn); if (expunge) { - getNumberCache().expunge(origMr.getUid()); + numberCache.expunge(uid); } msnEvents[i++]=newMr; } @@ -169,11 +175,18 @@ public synchronized void flagsUpdated(MessageResult mr, MailboxListener silentListener) { + final long uid = mr.getUid(); + final Long uidObject = new Long(uid); if (silentListener != this - || flagEventMap.containsKey(new Long(mr.getUid()))) { + || flagEventMap.containsKey(uidObject)) { // if there has been an external update in the past we should inform // about the newest value, even if in silent mode - flagEventMap.put(new Long(mr.getUid()), mr); + + // only store flags + final MessageResultImpl lightweightResult = new MessageResultImpl(uid); + final Flags flags = mr.getFlags(); + lightweightResult.setFlags(flags); + flagEventMap.put(uidObject, lightweightResult); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]