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 2010/11/12 20:59:52 UTC
svn commit: r1034548 - in
/james/server/trunk/queue-activemq/src/main/java/org/apache/james/queue/activemq:
FileSystemBlobStrategy.java FileSystemBlobTransferPolicy.java
Author: norman
Date: Fri Nov 12 19:59:51 2010
New Revision: 1034548
URL: http://svn.apache.org/viewvc?rev=1034548&view=rev
Log:
Store BlobMessage payload in different subfolders (random) to improve performance when you have many messages in the queue (JAMES-1129)
Modified:
james/server/trunk/queue-activemq/src/main/java/org/apache/james/queue/activemq/FileSystemBlobStrategy.java
james/server/trunk/queue-activemq/src/main/java/org/apache/james/queue/activemq/FileSystemBlobTransferPolicy.java
Modified: james/server/trunk/queue-activemq/src/main/java/org/apache/james/queue/activemq/FileSystemBlobStrategy.java
URL: http://svn.apache.org/viewvc/james/server/trunk/queue-activemq/src/main/java/org/apache/james/queue/activemq/FileSystemBlobStrategy.java?rev=1034548&r1=1034547&r2=1034548&view=diff
==============================================================================
--- james/server/trunk/queue-activemq/src/main/java/org/apache/james/queue/activemq/FileSystemBlobStrategy.java (original)
+++ james/server/trunk/queue-activemq/src/main/java/org/apache/james/queue/activemq/FileSystemBlobStrategy.java Fri Nov 12 19:59:51 2010
@@ -47,10 +47,12 @@ public class FileSystemBlobStrategy impl
private final FileSystem fs;
private final BlobTransferPolicy policy;
private final ConcurrentHashMap<String, SharedFileInputStream> map = new ConcurrentHashMap<String, SharedFileInputStream>();
+ private int splitCount;
- public FileSystemBlobStrategy(final BlobTransferPolicy policy, final FileSystem fs) {
+ public FileSystemBlobStrategy(final BlobTransferPolicy policy, final FileSystem fs, int splitCount) {
this.fs = fs;
this.policy = policy;
+ this.splitCount = splitCount;
}
/*
@@ -141,9 +143,15 @@ public class FileSystemBlobStrategy impl
* @throws JMSException
* @throws FileNotFoundException
*/
- protected File getFile(ActiveMQBlobMessage message) throws JMSException, FileNotFoundException {
+ protected File getFile(ActiveMQBlobMessage message) throws JMSException, IOException {
+ if (message.getURL() != null) {
+ return fs.getFile(message.getURL().toString());
+ }
String mailname = message.getStringProperty(JAMES_MAIL_NAME);
- String queueUrl = policy.getUploadUrl() + "/";
+ int i = (int) (Math.random()*splitCount+1);
+
+ String queueUrl = policy.getUploadUrl() + "/" +i;
+
File queueF = fs.getFile(queueUrl);
// check if we need to create the queue folder
Modified: james/server/trunk/queue-activemq/src/main/java/org/apache/james/queue/activemq/FileSystemBlobTransferPolicy.java
URL: http://svn.apache.org/viewvc/james/server/trunk/queue-activemq/src/main/java/org/apache/james/queue/activemq/FileSystemBlobTransferPolicy.java?rev=1034548&r1=1034547&r2=1034548&view=diff
==============================================================================
--- james/server/trunk/queue-activemq/src/main/java/org/apache/james/queue/activemq/FileSystemBlobTransferPolicy.java (original)
+++ james/server/trunk/queue-activemq/src/main/java/org/apache/james/queue/activemq/FileSystemBlobTransferPolicy.java Fri Nov 12 19:59:51 2010
@@ -33,11 +33,17 @@ import org.apache.james.services.FileSys
public class FileSystemBlobTransferPolicy extends BlobTransferPolicy{
private FileSystem fs;
+ private int splitCount = 10;
+ private FileSystemBlobStrategy strategy;
@Resource(name="filesystem")
public void setFileSystem(FileSystem fs) {
this.fs = fs;
}
+
+ public void setSplitCount(int splitCount) {
+ this.splitCount = splitCount;
+ }
@Override
public BlobTransferPolicy copy() {
@@ -53,12 +59,18 @@ public class FileSystemBlobTransferPolic
@Override
protected BlobDownloadStrategy createDownloadStrategy() {
- return new FileSystemBlobStrategy(this, fs);
+ return getStrategy();
}
@Override
protected BlobUploadStrategy createUploadStrategy() {
- return new FileSystemBlobStrategy(this, fs);
+ return getStrategy();
}
+ private synchronized FileSystemBlobStrategy getStrategy() {
+ if (strategy == null) {
+ strategy = new FileSystemBlobStrategy(this, fs, splitCount);
+ }
+ return strategy;
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org