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

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

commit d6ac26ff738d4bef849fc4511a13ae50a6c6a71b
Author: RĂ©mi Kowalski <[email protected]>
AuthorDate: Wed Jul 22 16:05:29 2020 +0200

    JAMES-3317 use Storage strategy from BlobStoreConfiguration when 
instantiating the blobstore
---
 .../modules/blobstore/BlobStoreModulesChooser.java | 45 +++++++++++++++++-----
 src/site/xdoc/server/config-blobstore.xml          |  9 +++++
 2 files changed, 44 insertions(+), 10 deletions(-)

diff --git 
a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreModulesChooser.java
 
b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreModulesChooser.java
index c0cdcc2..323f6c5 100644
--- 
a/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreModulesChooser.java
+++ 
b/server/container/guice/cassandra-rabbitmq-guice/src/main/java/org/apache/james/modules/blobstore/BlobStoreModulesChooser.java
@@ -29,6 +29,8 @@ import 
org.apache.james.blob.objectstorage.ObjectStorageBlobStore;
 import org.apache.james.modules.mailbox.CassandraBlobStoreDependenciesModule;
 import org.apache.james.modules.objectstorage.ObjectStorageDependenciesModule;
 import org.apache.james.server.blob.deduplication.DeDuplicationBlobStore;
+import org.apache.james.server.blob.deduplication.PassThroughBlobStore;
+import org.apache.james.server.blob.deduplication.StorageStrategy;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableList;
@@ -37,20 +39,16 @@ import com.google.inject.Module;
 import com.google.inject.name.Names;
 
 public class BlobStoreModulesChooser {
-    static class CassandraDeclarationModule extends AbstractModule {
+    static class CassandraDumbBlobStoreDeclarationModule extends 
AbstractModule {
         @Override
         protected void configure() {
             install(new CassandraBlobStoreDependenciesModule());
 
             bind(DumbBlobStore.class).to(CassandraDumbBlobStore.class);
-
-            bind(BlobStore.class)
-                .annotatedWith(Names.named(CachedBlobStore.BACKEND))
-                .to(DeDuplicationBlobStore.class);
         }
     }
 
-    static class ObjectStorageDeclarationModule extends AbstractModule {
+    static class ObjectStorageDumdBlobStoreDeclarationModule extends 
AbstractModule {
         @Override
         protected void configure() {
             install(new ObjectStorageDependenciesModule());
@@ -63,13 +61,40 @@ public class BlobStoreModulesChooser {
 
     @VisibleForTesting
     public static List<Module> chooseModules(BlobStoreConfiguration 
choosingConfiguration) {
-        switch (choosingConfiguration.getImplementation()) {
+        ImmutableList.Builder<Module> moduleBuilder = 
ImmutableList.<Module>builder().add(
+            
chooseDumBlobStoreModule(choosingConfiguration.getImplementation()));
+
+        //TODO JAMES-3028 add the storage policy module for all implementation 
and unbind the ObjectStorageBlobStore
+        if (choosingConfiguration.getImplementation() == 
BlobStoreConfiguration.BlobStoreImplName.CASSANDRA) {
+            moduleBuilder.add(
+                
chooseStoragePolicyModule(choosingConfiguration.storageStrategy()));
+        }
+        return moduleBuilder.build();
+    }
+
+    public static Module 
chooseDumBlobStoreModule(BlobStoreConfiguration.BlobStoreImplName 
implementation) {
+        switch (implementation) {
             case CASSANDRA:
-                return ImmutableList.of(new CassandraDeclarationModule());
+                return new CassandraDumbBlobStoreDeclarationModule();
             case OBJECTSTORAGE:
-                return ImmutableList.of(new ObjectStorageDeclarationModule());
+                return new ObjectStorageDumdBlobStoreDeclarationModule();
+            default:
+                throw new RuntimeException("Unsupported blobStore 
implementation " + implementation);
+        }
+    }
+
+    private static Module chooseStoragePolicyModule(StorageStrategy 
storageStrategy) {
+        switch (storageStrategy) {
+            case DEDUPLICATION:
+                return binder -> binder.bind(BlobStore.class)
+                    .annotatedWith(Names.named(CachedBlobStore.BACKEND))
+                    .to(DeDuplicationBlobStore.class);
+            case PASSTHROUGH:
+                return binder -> binder.bind(BlobStore.class)
+                    .annotatedWith(Names.named(CachedBlobStore.BACKEND))
+                    .to(PassThroughBlobStore.class);
             default:
-                throw new RuntimeException("Unsuported blobStore 
implementation " + choosingConfiguration.getImplementation());
+                throw new RuntimeException("Unknown storage strategy " + 
storageStrategy.name());
         }
     }
 }
diff --git a/src/site/xdoc/server/config-blobstore.xml 
b/src/site/xdoc/server/config-blobstore.xml
index 299d764..a6f1a1b 100644
--- a/src/site/xdoc/server/config-blobstore.xml
+++ b/src/site/xdoc/server/config-blobstore.xml
@@ -46,6 +46,15 @@
                 <dt><strong>implementation</strong></dt>
                 <dd>cassandra: use cassandra based BlobStore</dd>
                 <dd>objectstorage: use Swift/AWS S3 based BlobStore</dd>
+
+                <dt><strong>deduplication/enable</strong></dt>
+                <dd>Mandatory. Supported value: true and false.</dd>
+                <dd>If you choose to enable deduplication, the mails with the 
same content will be stored only once.</dd>
+                <dd>Warning: Once this feature is enabled, there is no turning 
back as turning it off will lead to the deletion of all</dd>
+                <dd>the mails sharing the same content once one is 
deleted.</dd>
+                <dd>This feature also requires a garbage collector mechanism 
to effectively drop blobs, which is not implemented yet.</dd>
+                <dd>Consequently, all the requested deletions will not be 
performed, meaning that blobstore will only grow.</dd>
+                <dd>Upgrade note: If you are upgrading from James 3.5 or 
older, the deduplication was enabled.</dd>
             </dl>
 
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to