You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2011/10/01 19:48:40 UTC
svn commit: r1178050 -
/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
Author: norman
Date: Sat Oct 1 17:48:40 2011
New Revision: 1178050
URL: http://svn.apache.org/viewvc?rev=1178050&view=rev
Log:
Allow to set a max "batch size" while do the copy. This allows to not keep the lock for the whole time and so other waiting threads also have a chance to get it. By default it not tries to break things down in batches. See MAILBOX-148
Modified:
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
Modified: james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java?rev=1178050&r1=1178049&r2=1178050&view=diff
==============================================================================
--- james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java (original)
+++ james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java Sat Oct 1 17:48:40 2011
@@ -21,6 +21,7 @@ package org.apache.james.mailbox.store;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Random;
@@ -73,6 +74,9 @@ public class StoreMailboxManager<Id> imp
private final Authenticator authenticator;
private final static Random RANDOM = new Random();
+ private int copyBatchSize = 0;
+
+
private MailboxPathLocker locker;
@@ -89,6 +93,10 @@ public class StoreMailboxManager<Id> imp
this(mailboxSessionMapperFactory, authenticator, new JVMMailboxPathLocker());
}
+ public void setCopyBatchSize(int copyBatchSize) {
+ this.copyBatchSize = copyBatchSize;
+ }
+
/**
* Init the {@link MailboxManager}
*
@@ -441,7 +449,17 @@ public class StoreMailboxManager<Id> imp
public List<MessageRange> copyMessages(MessageRange set, MailboxPath from, MailboxPath to, MailboxSession session) throws MailboxException {
StoreMessageManager<Id> toMailbox = (StoreMessageManager<Id>) getMailbox(to, session);
StoreMessageManager<Id> fromMailbox = (StoreMessageManager<Id>) getMailbox(from, session);
- return fromMailbox.copyTo(set, toMailbox, session);
+
+ if (copyBatchSize > 0) {
+ List<MessageRange> copiedRanges = new ArrayList<MessageRange>();
+ Iterator<MessageRange> ranges = set.split(copyBatchSize).iterator();
+ while(ranges.hasNext()) {
+ copiedRanges.addAll(fromMailbox.copyTo(ranges.next(), toMailbox, session));
+ }
+ return copiedRanges;
+ } else {
+ return fromMailbox.copyTo(set, toMailbox, session);
+ }
}
/*
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org