You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2022/03/15 02:00:21 UTC
[james-project] 03/10: JAMES-3720 Fix temporary file leak when browsing mailqueue
This is an automated email from the ASF dual-hosted git repository.
btellier pushed a commit to branch 3.7.x
in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 767ff948b1041590bafa34ca3b18698f4de750d0
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri Mar 4 17:22:54 2022 +0700
JAMES-3720 Fix temporary file leak when browsing mailqueue
(cherry picked from commit e8ae8f7c9bdc6e5f17ab6a8f1de89b31d272e78f)
---
.../java/org/apache/james/webadmin/dto/MailQueueItemDTO.java | 7 ++++++-
server/queue/queue-api/pom.xml | 4 ++++
.../java/org/apache/james/queue/api/ManageableMailQueue.java | 9 ++++++++-
.../java/org/apache/james/queue/library/MailQueueManagement.java | 2 ++
.../queue/rabbitmq/view/cassandra/CassandraMailQueueBrowser.java | 9 ++++++++-
5 files changed, 28 insertions(+), 3 deletions(-)
diff --git a/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/dto/MailQueueItemDTO.java b/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/dto/MailQueueItemDTO.java
index 4ae1fe5..f0b12ec 100644
--- a/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/dto/MailQueueItemDTO.java
+++ b/server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/dto/MailQueueItemDTO.java
@@ -25,6 +25,7 @@ import java.util.List;
import java.util.Optional;
import org.apache.james.core.MailAddress;
+import org.apache.james.lifecycle.api.LifecycleUtil;
import org.apache.james.queue.api.ManageableMailQueue;
import com.google.common.base.Preconditions;
@@ -38,12 +39,16 @@ public class MailQueueItemDTO {
}
public static MailQueueItemDTO from(ManageableMailQueue.MailQueueItemView mailQueueItemView) {
- return builder()
+ try {
+ return builder()
.name(mailQueueItemView.getMail().getName())
.sender(mailQueueItemView.getMail().getMaybeSender().asOptional())
.recipients(mailQueueItemView.getMail().getRecipients())
.nextDelivery(mailQueueItemView.getNextDelivery())
.build();
+ } finally {
+ LifecycleUtil.dispose(mailQueueItemView);
+ }
}
public static class Builder {
diff --git a/server/queue/queue-api/pom.xml b/server/queue/queue-api/pom.xml
index 33b701a..54354c3 100644
--- a/server/queue/queue-api/pom.xml
+++ b/server/queue/queue-api/pom.xml
@@ -39,6 +39,10 @@
</dependency>
<dependency>
<groupId>${james.groupId}</groupId>
+ <artifactId>james-server-lifecycle-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>${james.groupId}</groupId>
<artifactId>james-server-testing</artifactId>
<scope>test</scope>
</dependency>
diff --git a/server/queue/queue-api/src/main/java/org/apache/james/queue/api/ManageableMailQueue.java b/server/queue/queue-api/src/main/java/org/apache/james/queue/api/ManageableMailQueue.java
index a9307f8..d8f2ec0 100644
--- a/server/queue/queue-api/src/main/java/org/apache/james/queue/api/ManageableMailQueue.java
+++ b/server/queue/queue-api/src/main/java/org/apache/james/queue/api/ManageableMailQueue.java
@@ -22,6 +22,8 @@ import java.time.ZonedDateTime;
import java.util.Iterator;
import java.util.Optional;
+import org.apache.james.lifecycle.api.LifecycleUtil;
+import org.apache.james.mime4j.dom.Disposable;
import org.apache.mailet.Mail;
/**
@@ -105,7 +107,7 @@ public interface ManageableMailQueue extends MailQueue {
/**
* Represent a View over a queue {@link MailQueue.MailQueueItem}
*/
- class DefaultMailQueueItemView implements MailQueueItemView {
+ class DefaultMailQueueItemView implements MailQueueItemView, Disposable {
private final Mail mail;
private final Optional<ZonedDateTime> nextDelivery;
@@ -130,6 +132,11 @@ public interface ManageableMailQueue extends MailQueue {
public Optional<ZonedDateTime> getNextDelivery() {
return nextDelivery;
}
+
+ @Override
+ public void dispose() {
+ LifecycleUtil.dispose(mail);
+ }
}
}
diff --git a/server/queue/queue-jms/src/main/java/org/apache/james/queue/library/MailQueueManagement.java b/server/queue/queue-jms/src/main/java/org/apache/james/queue/library/MailQueueManagement.java
index 2dfde3b..54695ad 100644
--- a/server/queue/queue-jms/src/main/java/org/apache/james/queue/library/MailQueueManagement.java
+++ b/server/queue/queue-jms/src/main/java/org/apache/james/queue/library/MailQueueManagement.java
@@ -34,6 +34,7 @@ import javax.management.openmbean.OpenType;
import javax.management.openmbean.SimpleType;
import org.apache.james.core.MailAddress;
+import org.apache.james.lifecycle.api.LifecycleUtil;
import org.apache.james.queue.api.MailQueue.MailQueueException;
import org.apache.james.queue.api.MailQueueManagementMBean;
import org.apache.james.queue.api.ManageableMailQueue;
@@ -158,6 +159,7 @@ public class MailQueueManagement extends StandardMBean implements MailQueueManag
map.put(names[10], nextDelivery);
CompositeDataSupport c = new CompositeDataSupport(new CompositeType(Mail.class.getName(), "Queue Mail", names, descs, types), map);
data.add(c);
+ LifecycleUtil.dispose(mView);
}
it.close();
return data;
diff --git a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueBrowser.java b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueBrowser.java
index 2b9b812..94314de 100644
--- a/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueBrowser.java
+++ b/server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueBrowser.java
@@ -38,6 +38,8 @@ import org.apache.commons.lang3.tuple.Pair;
import org.apache.james.blob.api.Store;
import org.apache.james.blob.mail.MimeMessagePartsId;
import org.apache.james.blob.mail.MimeMessageStore;
+import org.apache.james.lifecycle.api.LifecycleUtil;
+import org.apache.james.mime4j.dom.Disposable;
import org.apache.james.queue.api.ManageableMailQueue;
import org.apache.james.queue.rabbitmq.EnqueueId;
import org.apache.james.queue.rabbitmq.EnqueuedItem;
@@ -175,7 +177,7 @@ public class CassandraMailQueueBrowser {
.map(BucketId::of);
}
- public static class CassandraMailQueueItemView implements ManageableMailQueue.MailQueueItemView {
+ public static class CassandraMailQueueItemView implements ManageableMailQueue.MailQueueItemView, Disposable {
private final EnqueuedItem enqueuedItem;
private final Mail mail;
@@ -205,5 +207,10 @@ public class CassandraMailQueueBrowser {
public Optional<ZonedDateTime> getNextDelivery() {
return Optional.empty();
}
+
+ @Override
+ public void dispose() {
+ LifecycleUtil.dispose(mail);
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org