Author: wstrzalka
Date: Sun Sep  4 16:46:32 2011
New Revision: 1165073

URL: http://svn.apache.org/viewvc?rev=1165073&view=rev
Log:
Make sure we have an higher uid on each append so we don't generate out of 
order events and so are imap compliant. CopyTo(...) method also generates UIDs 
so should be executed with the lock granted. See MAILBOX-131

Modified:
    
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java

Modified: 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java?rev=1165073&r1=1165072&r2=1165073&view=diff
==============================================================================
--- 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
 (original)
+++ 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
 Sun Sep  4 16:46:32 2011
@@ -519,16 +519,21 @@ public class StoreMessageManager<Id> imp
      * @param session
      * @throws MailboxException
      */
-    public List<MessageRange> copyTo(MessageRange set, StoreMessageManager<Id> 
toMailbox, MailboxSession session) throws MailboxException {
+    public List<MessageRange> copyTo(final MessageRange set, final 
StoreMessageManager<Id> toMailbox, final MailboxSession session) throws 
MailboxException {
         if (!toMailbox.isWriteable(session)) {
             throw new ReadOnlyException(new 
StoreMailboxPath<Id>(getMailboxEntity()),session.getPathDelimiter());
         }
         
         try {
-            Map<Long, MessageMetaData> copiedUids = copy(set, toMailbox, 
session);
-            dispatcher.added(session, copiedUids, 
toMailbox.getMailboxEntity());
+            return locker.executeWithLock(session, new 
StoreMailboxPath<Id>(getMailboxEntity()), new 
MailboxPathLocker.LockAwareExecution<List<MessageRange>>() {
 
-            return MessageRange.toRanges(new 
ArrayList<Long>(copiedUids.keySet()));
+                @Override
+                public List<MessageRange> execute() throws MailboxException {
+                    Map<Long, MessageMetaData> copiedUids = copy(set, 
toMailbox, session);
+                    dispatcher.added(session, copiedUids, 
toMailbox.getMailboxEntity());
+                    return MessageRange.toRanges(new 
ArrayList<Long>(copiedUids.keySet()));
+                }
+            }, true);
         } catch (MailboxException e) {
             throw new MailboxException("Unable to parse message", e);
         }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to