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]