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