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 2003/05/19 06:13:14 UTC

cvs commit: jakarta-james/src/java/org/apache/james/mailrepository/filepair File_Persistent_Stream_Repository.java

noel        2003/05/18 21:13:13

  Modified:    src/java/org/apache/james/mailrepository Tag: branch_2_1_fcs
                        MimeMessageAvalonSource.java
                        MimeMessageJDBCSource.java
               src/java/org/apache/james/mailrepository/filepair Tag:
                        branch_2_1_fcs
                        File_Persistent_Stream_Repository.java
  Log:
  Improve performance getting message size.  Two changes: (a) cache the size, (b) use File.length() for file-based message stores.
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.5.4.3   +10 -0     jakarta-james/src/java/org/apache/james/mailrepository/MimeMessageAvalonSource.java
  
  Index: MimeMessageAvalonSource.java
  ===================================================================
  RCS file: /home/cvs/jakarta-james/src/java/org/apache/james/mailrepository/MimeMessageAvalonSource.java,v
  retrieving revision 1.5.4.2
  retrieving revision 1.5.4.3
  diff -u -r1.5.4.2 -r1.5.4.3
  --- MimeMessageAvalonSource.java	8 Mar 2003 21:54:04 -0000	1.5.4.2
  +++ MimeMessageAvalonSource.java	19 May 2003 04:13:13 -0000	1.5.4.3
  @@ -84,6 +84,8 @@
        */
       String key = null;
   
  +    private long size = -1;
  +
       public MimeMessageAvalonSource(StreamRepository sr, String repositoryName, String key) {
           this.sr = sr;
           this.repositoryName = repositoryName;
  @@ -110,4 +112,12 @@
           return sr.get(key);
       }
   
  +    public long getMessageSize() throws IOException {
  +        if (size == -1) {
  +            if (sr instanceof org.apache.james.mailrepository.filepair.File_Persistent_Stream_Repository) {
  +                size = ((org.apache.james.mailrepository.filepair.File_Persistent_Stream_Repository) sr).getSize(key);
  +            } else size = super.getMessageSize();
  +        }
  +        return size;
  +    }
   }
  
  
  
  1.10.4.3  +14 -7     jakarta-james/src/java/org/apache/james/mailrepository/MimeMessageJDBCSource.java
  
  Index: MimeMessageJDBCSource.java
  ===================================================================
  RCS file: /home/cvs/jakarta-james/src/java/org/apache/james/mailrepository/MimeMessageJDBCSource.java,v
  retrieving revision 1.10.4.2
  retrieving revision 1.10.4.3
  diff -u -r1.10.4.2 -r1.10.4.3
  --- MimeMessageJDBCSource.java	8 Mar 2003 21:54:04 -0000	1.10.4.2
  +++ MimeMessageJDBCSource.java	19 May 2003 04:13:13 -0000	1.10.4.3
  @@ -88,6 +88,8 @@
       String key = null;
       StreamRepository sr = null;
   
  +    private long size = -1;
  +
       /**
        * SQL used to retrieve the message body
        */
  @@ -205,10 +207,11 @@
        * Runs a custom SQL statement to check the size of the message body
        */
       public synchronized long getMessageSize() throws IOException {
  +        if (size != -1) return size;
           if (retrieveMessageBodySizeSQL == null) {
               //There was no SQL statement for this repository... figure it out the hard way
               System.err.println("no SQL statement to find size");
  -            return super.getMessageSize();
  +            return size = super.getMessageSize();
           }
           Connection conn = null;
           PreparedStatement retrieveMessageSize = null;
  @@ -225,16 +228,20 @@
                   throw new IOException("Could not find message");
               }
   
  -            long size = rsRetrieveMessageSize.getLong(1);
  +            size = rsRetrieveMessageSize.getLong(1);
   
               InputStream in = null;
               try {
                   if (sr != null) {
  -                    in = sr.get(key);
  -                    int len = 0;
  -                    byte[] block = new byte[1024];
  -                    while ((len = in.read(block)) > -1) {
  -                        size += len;
  +                    if (sr instanceof org.apache.james.mailrepository.filepair.File_Persistent_Stream_Repository) {
  +                        size += ((org.apache.james.mailrepository.filepair.File_Persistent_Stream_Repository) sr).getSize(key);
  +                    } else {
  +                        in = sr.get(key);
  +                        int len = 0;
  +                        byte[] block = new byte[1024];
  +                        while ((len = in.read(block)) > -1) {
  +                            size += len;
  +                        }
                       }
                   }
               } catch (Exception e) {
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.2.2.4   +9 -2      jakarta-james/src/java/org/apache/james/mailrepository/filepair/File_Persistent_Stream_Repository.java
  
  Index: File_Persistent_Stream_Repository.java
  ===================================================================
  RCS file: /home/cvs/jakarta-james/src/java/org/apache/james/mailrepository/filepair/File_Persistent_Stream_Repository.java,v
  retrieving revision 1.2.2.3
  retrieving revision 1.2.2.4
  diff -u -r1.2.2.3 -r1.2.2.4
  --- File_Persistent_Stream_Repository.java	8 Mar 2003 21:54:04 -0000	1.2.2.3
  +++ File_Persistent_Stream_Repository.java	19 May 2003 04:13:13 -0000	1.2.2.4
  @@ -209,6 +209,13 @@
   
           super.remove( key );
       }
  -}
  -
   
  +    public long getSize(final String key) {
  +        try {
  +            return getFile(key).length();
  +        }
  +        catch(IOException e) {
  +            return 0;
  +        }
  +    }
  +}
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: james-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: james-dev-help@jakarta.apache.org