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 2004/08/19 01:32:26 UTC

cvs commit: james-server/src/java/org/apache/james/transport/mailets ToRepository.java

noel        2004/08/18 16:32:26

  Modified:    src/java/org/apache/james/mailrepository Tag: branch_2_1_fcs
                        AvalonMailRepository.java
               src/java/org/apache/james/transport/mailets Tag:
                        branch_2_1_fcs ToRepository.java
  Log:
  Allow user to turn off key caching.  Helpful when dealing with write-only/mostly repositories, such as spam and error traps.  Otherwise the keyset monotonically increases and consumes memory
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.20.4.15 +18 -9     james-server/src/java/org/apache/james/mailrepository/AvalonMailRepository.java
  
  Index: AvalonMailRepository.java
  ===================================================================
  RCS file: /home/cvs/james-server/src/java/org/apache/james/mailrepository/AvalonMailRepository.java,v
  retrieving revision 1.20.4.14
  retrieving revision 1.20.4.15
  diff -u -r1.20.4.14 -r1.20.4.15
  --- AvalonMailRepository.java	22 Apr 2004 01:48:22 -0000	1.20.4.14
  +++ AvalonMailRepository.java	18 Aug 2004 23:32:26 -0000	1.20.4.15
  @@ -68,6 +68,7 @@
       private String destination;
       private Set keys;
       private boolean fifo;
  +    private boolean cacheKeys; // experimental: for use with write mostly repositories such as spam and error
   
       /**
        * @see org.apache.avalon.framework.component.Composable#compose(ComponentManager)
  @@ -96,6 +97,7 @@
               throw new ConfigurationException(exceptionString);
           }
           fifo = conf.getAttributeAsBoolean("FIFO", false);
  +        cacheKeys = conf.getAttributeAsBoolean("CACHEKEYS", true);
           // ignore model
       }
   
  @@ -125,7 +127,7 @@
               sr = (StreamRepository) store.select(streamConfiguration);
               or = (ObjectRepository) store.select(objectConfiguration);
               lock = new Lock();
  -            keys = Collections.synchronizedSet(new HashSet());
  +            if (cacheKeys) keys = Collections.synchronizedSet(new HashSet());
   
   
               //Finds non-matching pairs and deletes the extra files
  @@ -152,11 +154,13 @@
                   remove(key);
               }
   
  -            //Next get a list from the object repository
  -            //  and use that for the list of keys
  -            keys.clear();
  -            for (Iterator i = or.list(); i.hasNext(); ) {
  -                keys.add(i.next());
  +            if (keys != null) {
  +                // Next get a list from the object repository
  +                // and use that for the list of keys
  +                keys.clear();
  +                for (Iterator i = or.list(); i.hasNext(); ) {
  +                    keys.add(i.next());
  +                }
               }
               if (getLogger().isDebugEnabled()) {
                   StringBuffer logBuffer =
  @@ -248,7 +252,7 @@
                   lock.lock(key);
               }
               try {
  -                if (!keys.contains(key)) {
  +                if (keys != null && !keys.contains(key)) {
                       keys.add(key);
                   }
                   boolean saveStream = true;
  @@ -381,7 +385,7 @@
       public void remove(String key) throws MessagingException {
           if (lock(key)) {
               try {
  -                keys.remove(key);
  +                if (keys != null) keys.remove(key);
                   sr.remove(key);
                   or.remove(key);
               } finally {
  @@ -407,8 +411,13 @@
           // Fix ConcurrentModificationException by cloning 
           // the keyset before getting an iterator
           final ArrayList clone;
  -        synchronized(keys) {
  +        if (keys != null) synchronized(keys) {
               clone = new ArrayList(keys);
  +        } else {
  +            clone = new ArrayList();
  +            for (Iterator i = or.list(); i.hasNext(); ) {
  +                clone.add(i.next());
  +            }
           }
           if (fifo) Collections.sort(clone); // Keys is a HashSet; impose FIFO for apps that need it
           return clone.iterator();
  
  
  
  No                   revision
  No                   revision
  1.8.4.5   +2 -1      james-server/src/java/org/apache/james/transport/mailets/ToRepository.java
  
  Index: ToRepository.java
  ===================================================================
  RCS file: /home/cvs/james-server/src/java/org/apache/james/transport/mailets/ToRepository.java,v
  retrieving revision 1.8.4.4
  retrieving revision 1.8.4.5
  diff -u -r1.8.4.4 -r1.8.4.5
  --- ToRepository.java	15 Mar 2004 03:54:19 -0000	1.8.4.4
  +++ ToRepository.java	18 Aug 2004 23:32:26 -0000	1.8.4.5
  @@ -71,6 +71,7 @@
                   = new DefaultConfiguration("repository", "generated:ToRepository");
               mailConf.setAttribute("destinationURL", repositoryPath);
               mailConf.setAttribute("type", "MAIL");
  +            mailConf.setAttribute("CACHEKEYS", getInitParameter("CACHEKEYS") == null ? "TRUE" : getInitParameter("CACHEKEYS"));
               repository = (MailRepository) mailstore.select(mailConf);
           } catch (ComponentException cnfe) {
               log("Failed to retrieve Store component:" + cnfe.getMessage());
  
  
  

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