You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by rc...@apache.org on 2022/09/28 09:39:00 UTC

[james-project] branch master updated: JAMES-3813 Module chooser for DeletedMessagesVault on Cassandra based… (#1195)

This is an automated email from the ASF dual-hosted git repository.

rcordier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git


The following commit(s) were added to refs/heads/master by this push:
     new 0600e060b9 JAMES-3813 Module chooser for DeletedMessagesVault on Cassandra based… (#1195)
0600e060b9 is described below

commit 0600e060b9406f58cf8b483d03f1109c7686a82d
Author: Benoit TELLIER <bt...@linagora.com>
AuthorDate: Wed Sep 28 16:38:54 2022 +0700

    JAMES-3813 Module chooser for DeletedMessagesVault on Cassandra based… (#1195)
---
 .../org/apache/james/vault/VaultConfiguration.java | 20 +++++++++++----
 .../james/vault/DeletedMessageVaultHookTest.java   |  2 +-
 .../apache/james/vault/VaultConfigurationTest.java | 12 ++++-----
 .../blob/BlobStoreDeletedMessageVaultTest.java     |  2 +-
 .../deletedMessageVault.properties                 |  3 +++
 .../sample-configuration/listeners.xml             |  3 +++
 .../james/CassandraJamesServerConfiguration.java   | 27 ++++++++++++++++++--
 .../org/apache/james/CassandraJamesServerMain.java | 17 ++++++++++---
 .../deletedMessageVault.properties                 |  3 +++
 .../sample-configuration/listeners.xml             |  4 +++
 .../james/CassandraRabbitMQJamesConfiguration.java | 27 ++++++++++++++++++--
 .../james/CassandraRabbitMQJamesServerMain.java    | 17 ++++++++++---
 .../deletedMessageVault.properties                 |  3 +++
 .../sample-configuration/listeners.xml             |  3 +++
 .../james/DistributedPOP3JamesConfiguration.java   | 29 ++++++++++++++++++++--
 .../james/DistributedPOP3JamesServerMain.java      | 17 ++++++++++---
 .../src/test/resources/listeners.xml               |  3 ---
 .../RabbitMQUnauthorizedEndpointsTest.java         |  2 ++
 ...rTaskSerializationIntegrationImmutableTest.java |  2 ++
 ...dminServerTaskSerializationIntegrationTest.java |  2 ++
 ...RabbitMQDeletedMessageVaultIntegrationTest.java |  2 ++
 .../routes/DeletedMessagesVaultRoutesTest.java     |  4 +--
 upgrade-instructions.md                            | 17 +++++++++++++
 23 files changed, 188 insertions(+), 33 deletions(-)

diff --git a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/VaultConfiguration.java b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/VaultConfiguration.java
index 918daa8dbc..c6e46fb0d8 100644
--- a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/VaultConfiguration.java
+++ b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/VaultConfiguration.java
@@ -32,7 +32,9 @@ import com.google.common.base.Preconditions;
 
 public class VaultConfiguration {
     public static final VaultConfiguration DEFAULT =
-        new VaultConfiguration(ChronoUnit.YEARS.getDuration(), DefaultMailboxes.RESTORED_MESSAGES);
+        new VaultConfiguration(false, ChronoUnit.YEARS.getDuration(), DefaultMailboxes.RESTORED_MESSAGES);
+    public static final VaultConfiguration ENABLED_DEFAULT =
+        new VaultConfiguration(true, ChronoUnit.YEARS.getDuration(), DefaultMailboxes.RESTORED_MESSAGES);
 
     public static VaultConfiguration from(Configuration propertiesConfiguration) {
         Duration retentionPeriod = Optional.ofNullable(propertiesConfiguration.getString("retentionPeriod"))
@@ -40,13 +42,16 @@ public class VaultConfiguration {
             .orElse(DEFAULT.getRetentionPeriod());
         String restoreLocation = Optional.ofNullable(propertiesConfiguration.getString("restoreLocation"))
             .orElse(DEFAULT.getRestoreLocation());
-        return new VaultConfiguration(retentionPeriod, restoreLocation);
+        boolean enabled = propertiesConfiguration.getBoolean("enabled", false);
+        return new VaultConfiguration(enabled, retentionPeriod, restoreLocation);
     }
 
+    private final boolean enabled;
     private final Duration retentionPeriod;
     private final String restoreLocation;
 
-    VaultConfiguration(Duration retentionPeriod, String restoreLocation) {
+    VaultConfiguration(boolean enabled, Duration retentionPeriod, String restoreLocation) {
+        this.enabled = enabled;
         Preconditions.checkNotNull(retentionPeriod);
         Preconditions.checkNotNull(restoreLocation);
 
@@ -54,6 +59,10 @@ public class VaultConfiguration {
         this.restoreLocation = restoreLocation;
     }
 
+    public boolean isEnabled() {
+        return enabled;
+    }
+
     public Duration getRetentionPeriod() {
         return retentionPeriod;
     }
@@ -68,13 +77,14 @@ public class VaultConfiguration {
             VaultConfiguration that = (VaultConfiguration) o;
 
             return Objects.equals(this.retentionPeriod, that.retentionPeriod)
-                && Objects.equals(this.restoreLocation, that.restoreLocation);
+                && Objects.equals(this.restoreLocation, that.restoreLocation)
+                && Objects.equals(this.enabled, that.enabled);
         }
         return false;
     }
 
     @Override
     public final int hashCode() {
-        return Objects.hash(retentionPeriod, restoreLocation);
+        return Objects.hash(retentionPeriod, restoreLocation, enabled);
     }
 }
diff --git a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultHookTest.java b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultHookTest.java
index 315d28970b..0c4447f3c8 100644
--- a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultHookTest.java
+++ b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultHookTest.java
@@ -120,7 +120,7 @@ class DeletedMessageVaultHookTest {
                 .blobIdFactory(new HashBlobId.Factory())
                 .defaultBucketName()
                 .passthrough(), blobStoreDAO, new BucketNameGenerator(clock), clock,
-            VaultConfiguration.DEFAULT);
+            VaultConfiguration.ENABLED_DEFAULT);
 
         DeletedMessageConverter deletedMessageConverter = new DeletedMessageConverter();
 
diff --git a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/VaultConfigurationTest.java b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/VaultConfigurationTest.java
index de34851366..656af119d6 100644
--- a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/VaultConfigurationTest.java
+++ b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/VaultConfigurationTest.java
@@ -40,13 +40,13 @@ class VaultConfigurationTest {
 
     @Test
     void constructorShouldThrowWhenRetentionPeriodIsNull() {
-        assertThatThrownBy(() -> new VaultConfiguration(null, DefaultMailboxes.RESTORED_MESSAGES))
+        assertThatThrownBy(() -> new VaultConfiguration(true, null, DefaultMailboxes.RESTORED_MESSAGES))
             .isInstanceOf(NullPointerException.class);
     }
 
     @Test
     void constructorShouldThrowWhenRestoreLocationIsNull() {
-        assertThatThrownBy(() -> new VaultConfiguration(ChronoUnit.YEARS.getDuration(), null))
+        assertThatThrownBy(() -> new VaultConfiguration(true, ChronoUnit.YEARS.getDuration(), null))
             .isInstanceOf(NullPointerException.class);
     }
 
@@ -62,7 +62,7 @@ class VaultConfigurationTest {
         configuration.addProperty("restoreLocation", "INBOX");
 
         assertThat(VaultConfiguration.from(configuration)).isEqualTo(
-            new VaultConfiguration(ChronoUnit.YEARS.getDuration(), DefaultMailboxes.INBOX));
+            new VaultConfiguration(false, ChronoUnit.YEARS.getDuration(), DefaultMailboxes.INBOX));
     }
 
     @Test
@@ -71,7 +71,7 @@ class VaultConfigurationTest {
         configuration.addProperty("retentionPeriod", "15d");
 
         assertThat(VaultConfiguration.from(configuration)).isEqualTo(
-            new VaultConfiguration(Duration.ofDays(15), DefaultMailboxes.RESTORED_MESSAGES));
+            new VaultConfiguration(false, Duration.ofDays(15), DefaultMailboxes.RESTORED_MESSAGES));
     }
 
     @Test
@@ -80,7 +80,7 @@ class VaultConfigurationTest {
         configuration.addProperty("retentionPeriod", "15h");
 
         assertThat(VaultConfiguration.from(configuration)).isEqualTo(
-            new VaultConfiguration(Duration.ofHours(15), DefaultMailboxes.RESTORED_MESSAGES));
+            new VaultConfiguration(false, Duration.ofHours(15), DefaultMailboxes.RESTORED_MESSAGES));
     }
 
     @Test
@@ -89,7 +89,7 @@ class VaultConfigurationTest {
         configuration.addProperty("retentionPeriod", "15");
 
         assertThat(VaultConfiguration.from(configuration)).isEqualTo(
-            new VaultConfiguration(Duration.ofDays(15), DefaultMailboxes.RESTORED_MESSAGES));
+            new VaultConfiguration(false, Duration.ofDays(15), DefaultMailboxes.RESTORED_MESSAGES));
     }
 
     @Test
diff --git a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/blob/BlobStoreDeletedMessageVaultTest.java b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/blob/BlobStoreDeletedMessageVaultTest.java
index fe6f1377e0..0e111ff019 100644
--- a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/blob/BlobStoreDeletedMessageVaultTest.java
+++ b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/blob/BlobStoreDeletedMessageVaultTest.java
@@ -71,7 +71,7 @@ class BlobStoreDeletedMessageVaultTest implements DeletedMessageVaultContract, D
                 .blobIdFactory(new HashBlobId.Factory())
                 .defaultBucketName()
                 .passthrough(),
-            blobStoreDAO, new BucketNameGenerator(clock), clock, VaultConfiguration.DEFAULT);
+            blobStoreDAO, new BucketNameGenerator(clock), clock, VaultConfiguration.ENABLED_DEFAULT);
     }
 
     @Override
diff --git a/server/apps/cassandra-app/sample-configuration/deletedMessageVault.properties b/server/apps/cassandra-app/sample-configuration/deletedMessageVault.properties
index ab1e3eef99..a6df89a227 100644
--- a/server/apps/cassandra-app/sample-configuration/deletedMessageVault.properties
+++ b/server/apps/cassandra-app/sample-configuration/deletedMessageVault.properties
@@ -1,4 +1,7 @@
 # ============================================= Deleted Messages Vault Configuration ==================================
+
+enabled=false
+
 # Retention period for your deleted messages into the vault, after which they expire and can be potentially cleaned up
 # Optional, default 1y
 # retentionPeriod=1y
\ No newline at end of file
diff --git a/server/apps/cassandra-app/sample-configuration/listeners.xml b/server/apps/cassandra-app/sample-configuration/listeners.xml
index 6a1d26196f..9803da2286 100644
--- a/server/apps/cassandra-app/sample-configuration/listeners.xml
+++ b/server/apps/cassandra-app/sample-configuration/listeners.xml
@@ -24,9 +24,12 @@
   <listener>
     <class>org.apache.james.mailbox.cassandra.MailboxOperationLoggingListener</class>
   </listener>
+  <!-- Requires Deleted Message Vault to be activated. See deletedMessageVault.properties -->
+  <!--
   <preDeletionHook>
     <class>org.apache.james.vault.DeletedMessageVaultHook</class>
   </preDeletionHook>
+  -->
 
   <!-- Enable to populate JMAP EmailQueryView -->
   <!--
diff --git a/server/apps/cassandra-app/src/main/java/org/apache/james/CassandraJamesServerConfiguration.java b/server/apps/cassandra-app/src/main/java/org/apache/james/CassandraJamesServerConfiguration.java
index d0af89bbf7..66cdafdf52 100644
--- a/server/apps/cassandra-app/src/main/java/org/apache/james/CassandraJamesServerConfiguration.java
+++ b/server/apps/cassandra-app/src/main/java/org/apache/james/CassandraJamesServerConfiguration.java
@@ -22,6 +22,7 @@ package org.apache.james;
 import java.io.File;
 import java.util.Optional;
 
+import org.apache.commons.configuration2.ex.ConfigurationException;
 import org.apache.james.data.UsersRepositoryModuleChooser;
 import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.filesystem.api.JamesDirectoriesProvider;
@@ -31,6 +32,7 @@ import org.apache.james.server.core.configuration.Configuration;
 import org.apache.james.server.core.configuration.FileConfigurationProvider;
 import org.apache.james.server.core.filesystem.FileSystemImpl;
 import org.apache.james.utils.PropertiesProvider;
+import org.apache.james.vault.VaultConfiguration;
 
 import com.github.fge.lambdas.Throwing;
 
@@ -49,6 +51,7 @@ public class CassandraJamesServerConfiguration implements Configuration {
         private Optional<ConfigurationPath> configurationPath;
         private Optional<BlobStoreConfiguration> blobStoreConfiguration;
         private Optional<UsersRepositoryModuleChooser.Implementation> usersRepositoryImplementation;
+        private Optional<VaultConfiguration> vaultConfiguration;
 
         private Builder() {
             rootDirectory = Optional.empty();
@@ -56,6 +59,7 @@ public class CassandraJamesServerConfiguration implements Configuration {
             searchConfiguration = Optional.empty();
             usersRepositoryImplementation = Optional.empty();
             blobStoreConfiguration = Optional.empty();
+            vaultConfiguration = Optional.empty();
         }
 
         public Builder workingDirectory(String path) {
@@ -101,6 +105,11 @@ public class CassandraJamesServerConfiguration implements Configuration {
             return this;
         }
 
+        public Builder vaultConfiguration(VaultConfiguration vaultConfiguration) {
+            this.vaultConfiguration = Optional.of(vaultConfiguration);
+            return this;
+        }
+
         public CassandraJamesServerConfiguration build() {
             ConfigurationPath configurationPath = this.configurationPath.orElse(new ConfigurationPath(FileSystem.FILE_PROTOCOL_AND_CONF));
             JamesServerResourceLoader directories = new JamesServerResourceLoader(rootDirectory
@@ -121,7 +130,15 @@ public class CassandraJamesServerConfiguration implements Configuration {
             UsersRepositoryModuleChooser.Implementation usersRepositoryChoice = usersRepositoryImplementation.orElseGet(
                 () -> UsersRepositoryModuleChooser.Implementation.parse(configurationProvider));
 
-            return new CassandraJamesServerConfiguration(configurationPath, directories, searchConfiguration, blobStoreConfiguration, usersRepositoryChoice);
+            VaultConfiguration vaultConfiguration = this.vaultConfiguration.orElseGet(() -> {
+                try {
+                    return VaultConfiguration.from(configurationProvider.getConfiguration("deletedMessageVault"));
+                } catch (ConfigurationException e) {
+                    return VaultConfiguration.DEFAULT;
+                }
+            });
+
+            return new CassandraJamesServerConfiguration(configurationPath, directories, searchConfiguration, blobStoreConfiguration, usersRepositoryChoice, vaultConfiguration);
         }
     }
 
@@ -134,13 +151,15 @@ public class CassandraJamesServerConfiguration implements Configuration {
     private final SearchConfiguration searchConfiguration;
     private final BlobStoreConfiguration blobStoreConfiguration;
     private final UsersRepositoryModuleChooser.Implementation usersRepositoryImplementation;
+    private final VaultConfiguration vaultConfiguration;
 
-    private CassandraJamesServerConfiguration(ConfigurationPath configurationPath, JamesDirectoriesProvider directories, SearchConfiguration searchConfiguration, BlobStoreConfiguration blobStoreConfiguration, UsersRepositoryModuleChooser.Implementation usersRepositoryImplementation) {
+    private CassandraJamesServerConfiguration(ConfigurationPath configurationPath, JamesDirectoriesProvider directories, SearchConfiguration searchConfiguration, BlobStoreConfiguration blobStoreConfiguration, UsersRepositoryModuleChooser.Implementation usersRepositoryImplementation, VaultConfiguration vaultConfiguration) {
         this.configurationPath = configurationPath;
         this.directories = directories;
         this.searchConfiguration = searchConfiguration;
         this.blobStoreConfiguration = blobStoreConfiguration;
         this.usersRepositoryImplementation = usersRepositoryImplementation;
+        this.vaultConfiguration = vaultConfiguration;
     }
 
     @Override
@@ -157,6 +176,10 @@ public class CassandraJamesServerConfiguration implements Configuration {
         return searchConfiguration;
     }
 
+    public VaultConfiguration getVaultConfiguration() {
+        return vaultConfiguration;
+    }
+
     public UsersRepositoryModuleChooser.Implementation getUsersRepositoryImplementation() {
         return usersRepositoryImplementation;
     }
diff --git a/server/apps/cassandra-app/src/main/java/org/apache/james/CassandraJamesServerMain.java b/server/apps/cassandra-app/src/main/java/org/apache/james/CassandraJamesServerMain.java
index 8770a79604..ff4f5f90e7 100644
--- a/server/apps/cassandra-app/src/main/java/org/apache/james/CassandraJamesServerMain.java
+++ b/server/apps/cassandra-app/src/main/java/org/apache/james/CassandraJamesServerMain.java
@@ -75,6 +75,7 @@ import org.apache.james.modules.server.WebAdminServerModule;
 import org.apache.james.modules.vault.DeletedMessageVaultRoutesModule;
 import org.apache.james.modules.webadmin.CassandraRoutesModule;
 import org.apache.james.modules.webadmin.InconsistencySolvingRoutesModule;
+import org.apache.james.vault.VaultConfiguration;
 
 import com.google.common.collect.ImmutableSet;
 import com.google.inject.Module;
@@ -96,7 +97,6 @@ public class CassandraJamesServerMain implements JamesServerMain {
         new CassandraRoutesModule(),
         new DataRoutesModules(),
         new VacationRoutesModule(),
-        new DeletedMessageVaultRoutesModule(),
         new DLPRoutesModule(),
         new InconsistencyQuotasSolvingRoutesModule(),
         new InconsistencySolvingRoutesModule(),
@@ -150,7 +150,6 @@ public class CassandraJamesServerMain implements JamesServerMain {
     public static final Module CASSANDRA_MAILBOX_MODULE = Modules.combine(
         new CassandraConsistencyTaskSerializationModule(),
         new CassandraMailboxModule(),
-        new CassandraDeletedMessageVaultModule(),
         new MailboxModule(),
         new TikaMailboxModule());
 
@@ -190,6 +189,18 @@ public class CassandraJamesServerMain implements JamesServerMain {
             .combineWith(BlobStoreModulesChooser.chooseModules(configuration.getBlobStoreConfiguration()))
             .combineWith(SearchModuleChooser.chooseModules(configuration.searchConfiguration()))
             .combineWith(new UsersRepositoryModuleChooser(new CassandraUsersRepositoryModule())
-                .chooseModules(configuration.getUsersRepositoryImplementation()));
+                .chooseModules(configuration.getUsersRepositoryImplementation()))
+            .combineWith(chooseDeletedMessageVault(configuration.getVaultConfiguration()));
+    }
+
+    private static Module chooseDeletedMessageVault(VaultConfiguration vaultConfiguration) {
+        if (vaultConfiguration.isEnabled()) {
+            return Modules.combine(
+                new CassandraDeletedMessageVaultModule(),
+                new DeletedMessageVaultRoutesModule());
+        }
+        return binder -> {
+
+        };
     }
 }
diff --git a/server/apps/distributed-app/sample-configuration/deletedMessageVault.properties b/server/apps/distributed-app/sample-configuration/deletedMessageVault.properties
index ab1e3eef99..a6df89a227 100644
--- a/server/apps/distributed-app/sample-configuration/deletedMessageVault.properties
+++ b/server/apps/distributed-app/sample-configuration/deletedMessageVault.properties
@@ -1,4 +1,7 @@
 # ============================================= Deleted Messages Vault Configuration ==================================
+
+enabled=false
+
 # Retention period for your deleted messages into the vault, after which they expire and can be potentially cleaned up
 # Optional, default 1y
 # retentionPeriod=1y
\ No newline at end of file
diff --git a/server/apps/distributed-app/sample-configuration/listeners.xml b/server/apps/distributed-app/sample-configuration/listeners.xml
index f039b355a7..d90a373d6e 100644
--- a/server/apps/distributed-app/sample-configuration/listeners.xml
+++ b/server/apps/distributed-app/sample-configuration/listeners.xml
@@ -25,9 +25,13 @@
   <listener>
     <class>org.apache.james.mailbox.cassandra.MailboxOperationLoggingListener</class>
   </listener>
+
+  <!-- Requires Deleted Message Vault to be activated. See deletedMessageVault.properties -->
+  <!--
   <preDeletionHook>
     <class>org.apache.james.vault.DeletedMessageVaultHook</class>
   </preDeletionHook>
+  -->
 
   <!-- Enable to populate JMAP EmailQueryView -->
   <!--
diff --git a/server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesConfiguration.java b/server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesConfiguration.java
index 1a07d32a91..dbce0a3cc6 100644
--- a/server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesConfiguration.java
+++ b/server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesConfiguration.java
@@ -22,6 +22,7 @@ package org.apache.james;
 import java.io.File;
 import java.util.Optional;
 
+import org.apache.commons.configuration2.ex.ConfigurationException;
 import org.apache.james.data.UsersRepositoryModuleChooser;
 import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.filesystem.api.JamesDirectoriesProvider;
@@ -33,6 +34,7 @@ import org.apache.james.server.core.configuration.Configuration;
 import org.apache.james.server.core.configuration.FileConfigurationProvider;
 import org.apache.james.server.core.filesystem.FileSystemImpl;
 import org.apache.james.utils.PropertiesProvider;
+import org.apache.james.vault.VaultConfiguration;
 
 import com.github.fge.lambdas.Throwing;
 
@@ -44,6 +46,7 @@ public class CassandraRabbitMQJamesConfiguration implements Configuration {
         private Optional<ConfigurationPath> configurationPath;
         private Optional<MailQueueViewChoice> mailQueueViewChoice;
         private Optional<UsersRepositoryModuleChooser.Implementation> usersRepositoryImplementation;
+        private Optional<VaultConfiguration> vaultConfiguration;
 
         private Builder() {
             searchConfiguration = Optional.empty();
@@ -52,6 +55,7 @@ public class CassandraRabbitMQJamesConfiguration implements Configuration {
             blobStoreConfiguration = Optional.empty();
             usersRepositoryImplementation = Optional.empty();
             mailQueueViewChoice = Optional.empty();
+            vaultConfiguration = Optional.empty();
         }
 
         public Builder workingDirectory(String path) {
@@ -102,6 +106,11 @@ public class CassandraRabbitMQJamesConfiguration implements Configuration {
             return this;
         }
 
+        public Builder vaultConfiguration(VaultConfiguration vaultConfiguration) {
+            this.vaultConfiguration = Optional.of(vaultConfiguration);
+            return this;
+        }
+
         public CassandraRabbitMQJamesConfiguration build() {
             ConfigurationPath configurationPath = this.configurationPath.orElse(new ConfigurationPath(FileSystem.FILE_PROTOCOL_AND_CONF));
             JamesServerResourceLoader directories = new JamesServerResourceLoader(rootDirectory
@@ -127,13 +136,21 @@ public class CassandraRabbitMQJamesConfiguration implements Configuration {
                 () -> MailQueueViewChoice.parse(
                     new PropertiesProvider(fileSystem, configurationPath))));
 
+            VaultConfiguration vaultConfiguration = this.vaultConfiguration.orElseGet(() -> {
+                try {
+                    return VaultConfiguration.from(configurationProvider.getConfiguration("deletedMessageVault"));
+                } catch (ConfigurationException e) {
+                    return VaultConfiguration.DEFAULT;
+                }
+            });
+
             return new CassandraRabbitMQJamesConfiguration(
                 configurationPath,
                 directories,
                 blobStoreConfiguration,
                 searchConfiguration,
                 usersRepositoryChoice,
-                mailQueueViewChoice);
+                mailQueueViewChoice, vaultConfiguration);
         }
     }
 
@@ -147,14 +164,16 @@ public class CassandraRabbitMQJamesConfiguration implements Configuration {
     private final SearchConfiguration searchConfiguration;
     private final UsersRepositoryModuleChooser.Implementation usersRepositoryImplementation;
     private final MailQueueViewChoice mailQueueViewChoice;
+    private final VaultConfiguration vaultConfiguration;
 
-    public CassandraRabbitMQJamesConfiguration(ConfigurationPath configurationPath, JamesDirectoriesProvider directories, BlobStoreConfiguration blobStoreConfiguration, SearchConfiguration searchConfiguration, UsersRepositoryModuleChooser.Implementation usersRepositoryImplementation, MailQueueViewChoice mailQueueViewChoice) {
+    public CassandraRabbitMQJamesConfiguration(ConfigurationPath configurationPath, JamesDirectoriesProvider directories, BlobStoreConfiguration blobStoreConfiguration, SearchConfiguration searchConfiguration, UsersRepositoryModuleChooser.Implementation usersRepositoryImplementation, MailQueueViewChoice mailQueueViewChoice, VaultConfiguration vaultConfiguration) {
         this.configurationPath = configurationPath;
         this.directories = directories;
         this.blobStoreConfiguration = blobStoreConfiguration;
         this.searchConfiguration = searchConfiguration;
         this.usersRepositoryImplementation = usersRepositoryImplementation;
         this.mailQueueViewChoice = mailQueueViewChoice;
+        this.vaultConfiguration = vaultConfiguration;
     }
 
     public MailQueueViewChoice getMailQueueViewChoice() {
@@ -182,4 +201,8 @@ public class CassandraRabbitMQJamesConfiguration implements Configuration {
     public UsersRepositoryModuleChooser.Implementation getUsersRepositoryImplementation() {
         return usersRepositoryImplementation;
     }
+
+    public VaultConfiguration getVaultConfiguration() {
+        return vaultConfiguration;
+    }
 }
diff --git a/server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java b/server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java
index efa76a9ccf..a5a1cca527 100644
--- a/server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java
+++ b/server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java
@@ -82,6 +82,7 @@ import org.apache.james.modules.server.WebAdminServerModule;
 import org.apache.james.modules.vault.DeletedMessageVaultRoutesModule;
 import org.apache.james.modules.webadmin.CassandraRoutesModule;
 import org.apache.james.modules.webadmin.InconsistencySolvingRoutesModule;
+import org.apache.james.vault.VaultConfiguration;
 
 import com.google.common.collect.ImmutableSet;
 import com.google.inject.Module;
@@ -94,7 +95,6 @@ public class CassandraRabbitMQJamesServerMain implements JamesServerMain {
         new CassandraRoutesModule(),
         new DataRoutesModules(),
         new VacationRoutesModule(),
-        new DeletedMessageVaultRoutesModule(),
         new DLPRoutesModule(),
         new InconsistencyQuotasSolvingRoutesModule(),
         new InconsistencySolvingRoutesModule(),
@@ -146,7 +146,6 @@ public class CassandraRabbitMQJamesServerMain implements JamesServerMain {
     public static final Module CASSANDRA_MAILBOX_MODULE = Modules.combine(
         new CassandraConsistencyTaskSerializationModule(),
         new CassandraMailboxModule(),
-        new CassandraDeletedMessageVaultModule(),
         new MailboxModule(),
         new TikaMailboxModule());
 
@@ -190,6 +189,18 @@ public class CassandraRabbitMQJamesServerMain implements JamesServerMain {
             .combineWith(BlobStoreCacheModulesChooser.chooseModules(blobStoreConfiguration))
             .combineWith(SearchModuleChooser.chooseModules(searchConfiguration))
             .combineWith(new UsersRepositoryModuleChooser(new CassandraUsersRepositoryModule())
-                .chooseModules(configuration.getUsersRepositoryImplementation()));
+                .chooseModules(configuration.getUsersRepositoryImplementation()))
+            .combineWith(chooseDeletedMessageVault(configuration.getVaultConfiguration()));
+    }
+
+    private static Module chooseDeletedMessageVault(VaultConfiguration vaultConfiguration) {
+        if (vaultConfiguration.isEnabled()) {
+            return Modules.combine(
+                new CassandraDeletedMessageVaultModule(),
+                new DeletedMessageVaultRoutesModule());
+        }
+        return binder -> {
+
+        };
     }
 }
diff --git a/server/apps/distributed-pop3-app/sample-configuration/deletedMessageVault.properties b/server/apps/distributed-pop3-app/sample-configuration/deletedMessageVault.properties
index ff0869fe35..47ec56c5c4 100644
--- a/server/apps/distributed-pop3-app/sample-configuration/deletedMessageVault.properties
+++ b/server/apps/distributed-pop3-app/sample-configuration/deletedMessageVault.properties
@@ -1,4 +1,7 @@
 # ============================================= Deleted Messages Vault Configuration ==================================
+
+enabled=false
+
 # Retention period for your deleted messages into the vault, after which they expire and can be potentially cleaned up
 # Optional, default 1y
 # retentionPeriod=1y
diff --git a/server/apps/distributed-pop3-app/sample-configuration/listeners.xml b/server/apps/distributed-pop3-app/sample-configuration/listeners.xml
index f039b355a7..b8e256b794 100644
--- a/server/apps/distributed-pop3-app/sample-configuration/listeners.xml
+++ b/server/apps/distributed-pop3-app/sample-configuration/listeners.xml
@@ -25,9 +25,12 @@
   <listener>
     <class>org.apache.james.mailbox.cassandra.MailboxOperationLoggingListener</class>
   </listener>
+  <!-- Requires Deleted Message Vault to be activated. See deletedMessageVault.properties -->
+  <!--
   <preDeletionHook>
     <class>org.apache.james.vault.DeletedMessageVaultHook</class>
   </preDeletionHook>
+  -->
 
   <!-- Enable to populate JMAP EmailQueryView -->
   <!--
diff --git a/server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesConfiguration.java b/server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesConfiguration.java
index b1e9e30e0d..f8c706cc59 100644
--- a/server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesConfiguration.java
+++ b/server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesConfiguration.java
@@ -22,6 +22,7 @@ package org.apache.james;
 import java.io.File;
 import java.util.Optional;
 
+import org.apache.commons.configuration2.ex.ConfigurationException;
 import org.apache.james.data.UsersRepositoryModuleChooser;
 import org.apache.james.filesystem.api.FileSystem;
 import org.apache.james.filesystem.api.JamesDirectoriesProvider;
@@ -33,6 +34,7 @@ import org.apache.james.server.core.configuration.Configuration;
 import org.apache.james.server.core.configuration.FileConfigurationProvider;
 import org.apache.james.server.core.filesystem.FileSystemImpl;
 import org.apache.james.utils.PropertiesProvider;
+import org.apache.james.vault.VaultConfiguration;
 
 import com.github.fge.lambdas.Throwing;
 
@@ -44,6 +46,7 @@ public class DistributedPOP3JamesConfiguration implements Configuration {
         private Optional<ConfigurationPath> configurationPath;
         private Optional<UsersRepositoryModuleChooser.Implementation> usersRepositoryImplementation;
         private Optional<MailQueueViewChoice> mailQueueViewChoice;
+        private Optional<VaultConfiguration> vaultConfiguration;
 
         private Builder() {
             searchConfiguration = Optional.empty();
@@ -52,6 +55,7 @@ public class DistributedPOP3JamesConfiguration implements Configuration {
             blobStoreConfiguration = Optional.empty();
             usersRepositoryImplementation = Optional.empty();
             mailQueueViewChoice = Optional.empty();
+            vaultConfiguration = Optional.empty();
         }
 
         public Builder workingDirectory(String path) {
@@ -97,6 +101,12 @@ public class DistributedPOP3JamesConfiguration implements Configuration {
             return this;
         }
 
+
+        public Builder vaultConfiguration(VaultConfiguration vaultConfiguration) {
+            this.vaultConfiguration = Optional.of(vaultConfiguration);
+            return this;
+        }
+
         public DistributedPOP3JamesConfiguration build() {
             ConfigurationPath configurationPath = this.configurationPath.orElse(new ConfigurationPath(FileSystem.FILE_PROTOCOL_AND_CONF));
             JamesServerResourceLoader directories = new JamesServerResourceLoader(rootDirectory
@@ -122,13 +132,22 @@ public class DistributedPOP3JamesConfiguration implements Configuration {
                 () -> MailQueueViewChoice.parse(
                     new PropertiesProvider(fileSystem, configurationPath))));
 
+
+            VaultConfiguration vaultConfiguration = this.vaultConfiguration.orElseGet(() -> {
+                try {
+                    return VaultConfiguration.from(configurationProvider.getConfiguration("deletedMessageVault"));
+                } catch (ConfigurationException e) {
+                    return VaultConfiguration.DEFAULT;
+                }
+            });
+
             return new DistributedPOP3JamesConfiguration(
                 configurationPath,
                 directories,
                 blobStoreConfiguration,
                 searchConfiguration,
                 usersRepositoryChoice,
-                mailQueueViewChoice);
+                mailQueueViewChoice, vaultConfiguration);
         }
     }
 
@@ -142,14 +161,16 @@ public class DistributedPOP3JamesConfiguration implements Configuration {
     private final SearchConfiguration searchConfiguration;
     private final UsersRepositoryModuleChooser.Implementation usersRepositoryImplementation;
     private final MailQueueViewChoice mailQueueViewChoice;
+    private final VaultConfiguration vaultConfiguration;
 
-    public DistributedPOP3JamesConfiguration(ConfigurationPath configurationPath, JamesDirectoriesProvider directories, BlobStoreConfiguration blobStoreConfiguration, SearchConfiguration searchConfiguration, UsersRepositoryModuleChooser.Implementation usersRepositoryImplementation, MailQueueViewChoice mailQueueViewChoice) {
+    public DistributedPOP3JamesConfiguration(ConfigurationPath configurationPath, JamesDirectoriesProvider directories, BlobStoreConfiguration blobStoreConfiguration, SearchConfiguration searchConfiguration, UsersRepositoryModuleChooser.Implementation usersRepositoryImplementation, MailQueueViewChoice mailQueueViewChoice, VaultConfiguration vaultConfiguration) {
         this.configurationPath = configurationPath;
         this.directories = directories;
         this.blobStoreConfiguration = blobStoreConfiguration;
         this.searchConfiguration = searchConfiguration;
         this.usersRepositoryImplementation = usersRepositoryImplementation;
         this.mailQueueViewChoice = mailQueueViewChoice;
+        this.vaultConfiguration = vaultConfiguration;
     }
 
     public MailQueueViewChoice getMailQueueViewChoice() {
@@ -177,4 +198,8 @@ public class DistributedPOP3JamesConfiguration implements Configuration {
     public UsersRepositoryModuleChooser.Implementation getUsersRepositoryImplementation() {
         return usersRepositoryImplementation;
     }
+
+    public VaultConfiguration getVaultConfiguration() {
+        return vaultConfiguration;
+    }
 }
diff --git a/server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesServerMain.java b/server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesServerMain.java
index e5c7e374a1..5a603da627 100644
--- a/server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesServerMain.java
+++ b/server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesServerMain.java
@@ -85,6 +85,7 @@ import org.apache.james.modules.server.WebAdminServerModule;
 import org.apache.james.modules.vault.DeletedMessageVaultRoutesModule;
 import org.apache.james.modules.webadmin.CassandraRoutesModule;
 import org.apache.james.modules.webadmin.InconsistencySolvingRoutesModule;
+import org.apache.james.vault.VaultConfiguration;
 
 import com.google.common.collect.ImmutableSet;
 import com.google.inject.Module;
@@ -98,7 +99,6 @@ public class DistributedPOP3JamesServerMain implements JamesServerMain {
         new CassandraRoutesModule(),
         new DataRoutesModules(),
         new VacationRoutesModule(),
-        new DeletedMessageVaultRoutesModule(),
         new InconsistencyQuotasSolvingRoutesModule(),
         new InconsistencySolvingRoutesModule(),
         new MailboxesExportRoutesModule(),
@@ -132,7 +132,6 @@ public class DistributedPOP3JamesServerMain implements JamesServerMain {
         new CassandraBlobStoreDependenciesModule(),
         new CassandraDomainListModule(),
         new CassandraEventStoreModule(),
-        new CassandraDeletedMessageVaultModule(),
         new CassandraJmapModule(),
         new CassandraMailRepositoryModule(),
         new CassandraMetricsModule(),
@@ -196,6 +195,18 @@ public class DistributedPOP3JamesServerMain implements JamesServerMain {
                 binder.bind(UidProvider.class).to(RandomUidProvider.class);
                 binder.bind(RandomModSeqProvider.class).in(Scopes.SINGLETON);
                 binder.bind(ModSeqProvider.class).to(RandomModSeqProvider.class);
-            });
+            })
+            .combineWith(chooseDeletedMessageVault(configuration.getVaultConfiguration()));
+    }
+
+    private static Module chooseDeletedMessageVault(VaultConfiguration vaultConfiguration) {
+        if (vaultConfiguration.isEnabled()) {
+            return Modules.combine(
+                new CassandraDeletedMessageVaultModule(),
+                new DeletedMessageVaultRoutesModule());
+        }
+        return binder -> {
+
+        };
     }
 }
diff --git a/server/apps/distributed-pop3-app/src/test/resources/listeners.xml b/server/apps/distributed-pop3-app/src/test/resources/listeners.xml
index 7355d27d02..71dccb1ccb 100644
--- a/server/apps/distributed-pop3-app/src/test/resources/listeners.xml
+++ b/server/apps/distributed-pop3-app/src/test/resources/listeners.xml
@@ -22,7 +22,4 @@
   <listener>
     <class>org.apache.james.mailbox.cassandra.MailboxOperationLoggingListener</class>
   </listener>
-  <preDeletionHook>
-    <class>org.apache.james.vault.DeletedMessageVaultHook</class>
-  </preDeletionHook>
 </listeners>
\ No newline at end of file
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQUnauthorizedEndpointsTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQUnauthorizedEndpointsTest.java
index 2e71be399f..d6ab3eff5d 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQUnauthorizedEndpointsTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQUnauthorizedEndpointsTest.java
@@ -35,6 +35,7 @@ import org.apache.james.modules.AwsS3BlobStoreExtension;
 import org.apache.james.modules.RabbitMQExtension;
 import org.apache.james.modules.TestRabbitMQModule;
 import org.apache.james.modules.blobstore.BlobStoreConfiguration;
+import org.apache.james.vault.VaultConfiguration;
 import org.apache.james.webadmin.integration.UnauthorizedEndpointsTest;
 import org.apache.james.webadmin.integration.UnauthorizedModule;
 import org.apache.james.webadmin.routes.AliasRoutes;
@@ -75,6 +76,7 @@ class RabbitMQUnauthorizedEndpointsTest extends UnauthorizedEndpointsTest {
                 .deduplication()
                 .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.openSearch())
+            .vaultConfiguration(VaultConfiguration.ENABLED_DEFAULT)
             .build())
         .extension(new DockerOpenSearchExtension())
         .extension(new CassandraExtension())
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationImmutableTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationImmutableTest.java
index 032aa85d28..9607ad5304 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationImmutableTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationImmutableTest.java
@@ -44,6 +44,7 @@ import org.apache.james.modules.blobstore.BlobStoreConfiguration;
 import org.apache.james.probe.DataProbe;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.WebAdminGuiceProbe;
+import org.apache.james.vault.VaultConfiguration;
 import org.apache.james.webadmin.WebAdminUtils;
 import org.apache.james.webadmin.routes.CassandraMappingsRoutes;
 import org.apache.james.webadmin.routes.MailQueueRoutes;
@@ -73,6 +74,7 @@ class RabbitMQWebAdminServerTaskSerializationIntegrationImmutableTest {
                     .disableCache()
                     .deduplication()
                     .noCryptoConfig())
+            .vaultConfiguration(VaultConfiguration.ENABLED_DEFAULT)
             .searchConfiguration(SearchConfiguration.openSearch())
             .build())
         .extension(new DockerOpenSearchExtension())
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java
index 015617a900..e54a15d3da 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java
@@ -74,6 +74,7 @@ import org.apache.james.task.TaskManager;
 import org.apache.james.utils.DataProbeImpl;
 import org.apache.james.utils.MailRepositoryProbeImpl;
 import org.apache.james.utils.WebAdminGuiceProbe;
+import org.apache.james.vault.VaultConfiguration;
 import org.apache.james.webadmin.WebAdminUtils;
 import org.apache.james.webadmin.routes.CassandraMailboxMergingRoutes;
 import org.apache.james.webadmin.routes.MailQueueRoutes;
@@ -105,6 +106,7 @@ class RabbitMQWebAdminServerTaskSerializationIntegrationTest {
                     .deduplication()
                     .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.openSearch())
+            .vaultConfiguration(VaultConfiguration.ENABLED_DEFAULT)
             .build())
         .extension(new DockerOpenSearchExtension())
         .extension(new CassandraExtension())
diff --git a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQDeletedMessageVaultIntegrationTest.java b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQDeletedMessageVaultIntegrationTest.java
index 575a42935b..ae708fb09c 100644
--- a/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQDeletedMessageVaultIntegrationTest.java
+++ b/server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQDeletedMessageVaultIntegrationTest.java
@@ -33,6 +33,7 @@ import org.apache.james.modules.RabbitMQExtension;
 import org.apache.james.modules.TestJMAPServerModule;
 import org.apache.james.modules.blobstore.BlobStoreConfiguration;
 import org.apache.james.modules.vault.TestDeleteMessageVaultPreDeletionHookModule;
+import org.apache.james.vault.VaultConfiguration;
 import org.apache.james.webadmin.integration.vault.DeletedMessageVaultIntegrationTest;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Tag;
@@ -54,6 +55,7 @@ class RabbitMQDeletedMessageVaultIntegrationTest extends DeletedMessageVaultInte
                     .deduplication()
                     .noCryptoConfig())
             .searchConfiguration(SearchConfiguration.openSearch())
+            .vaultConfiguration(VaultConfiguration.ENABLED_DEFAULT)
             .build())
         .extension(ES_EXTENSION)
         .extension(new CassandraExtension())
diff --git a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java
index a7b574bd3d..88032e17eb 100644
--- a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java
@@ -191,14 +191,14 @@ class DeletedMessagesVaultRoutesTest {
         clock = new UpdatableTickingClock(OLD_DELETION_DATE.toInstant());
         vault = spy(new BlobStoreDeletedMessageVault(new RecordingMetricFactory(), new MemoryDeletedMessageMetadataVault(),
             blobStore, blobStoreDAO, new BucketNameGenerator(clock), clock,
-            VaultConfiguration.DEFAULT));
+            VaultConfiguration.ENABLED_DEFAULT));
         InMemoryIntegrationResources inMemoryResource = InMemoryIntegrationResources.defaultResources();
         mailboxManager = spy(inMemoryResource.getMailboxManager());
 
         taskManager = new MemoryTaskManager(new Hostname("foo"));
         JsonTransformer jsonTransformer = new JsonTransformer();
 
-        RestoreService vaultRestore = new RestoreService(vault, mailboxManager, VaultConfiguration.DEFAULT);
+        RestoreService vaultRestore = new RestoreService(vault, mailboxManager, VaultConfiguration.ENABLED_DEFAULT);
         blobExporting = spy(new NoopBlobExporting());
         zipper = new DeletedMessageZipper();
         exportService = new ExportService(blobExporting, blobStore, zipper, vault);
diff --git a/upgrade-instructions.md b/upgrade-instructions.md
index d05cae0ccc..d57977ade5 100644
--- a/upgrade-instructions.md
+++ b/upgrade-instructions.md
@@ -19,6 +19,23 @@ Change list:
 - [Adding authorized_users column to user table](#adding-authorized_users-column-to-user-table)
 - [Migration to Cassandra driver 4](#migration-to-cassandra-driver-4)
 - [Migration to OpenSearch](#migration-to-opensearch)
+- [Deleted message vault is now deactivated by default](#deleted-message-vault-is-now-deactivated-by-default)
+
+### Deleted message vault is now deactivated by default
+
+Date: 13/09/2022
+
+Concerned products: Distributed James, Cassandra James
+
+In order to limit Cassandra table count, amongst others, the deleted message vault is now 
+disabled by default.
+
+Users relying on it needs to enable it within `deletedMessageVault.properties` with the following 
+property:
+
+```
+enabled=true
+```
 
 ### Removal of cassandra.properties chunk.size.message.read
 


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