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