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