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 bt...@apache.org on 2019/07/05 07:00:48 UTC

[james-project] branch master updated (2548451 -> 44e3108)

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

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


    from 2548451  Merge remote-tracking branch 'mbaechler/some-small-eventBus-fix'
     new d9b23f5  JAMES-2806 Replace ContainerName by BucketName in ObjectStorage
     new ae93217  JAMES-2806 Replace ContainerName by BucketName in ObjectStorage Guice
     new 265a972  JAMES-2806 BlobStore is in charge of providing default bucket name
     new 6c098b6  JAMES-2806 Temporary use BucketName.DEFAULT for BlobStore impls
     new e39ba7f  JAMES-2806 rename bucketName in ObjectStorageDAO to be more clear
     new c3b05b1  JAMES-2806 PutBlobFunction should have one more parameter of BucketName
     new 85f0a62  JAMES-2806 Rework delete & create bucket in ObjectStorageDAO
     new 18bb63c  JAMES-2806 Make namespace(defaultBucketName) configuration become optional
     new cb9a228  JAMES-2806 BucketPrefix configuration item in ObjectStorage
     new 54bac2e  JAMES-2806 Replace BucketName.DEFAULT by blobStore.getDefaultBucketName
     new 8c4b99d  JAMES-2806 Fix rename method in ObjectStorageDAO
     new 44e3108  JAMES-2806 add defaultBucketName configuration option

The 12 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../cassandra/mail/CassandraAttachmentMapper.java  |   7 +-
 .../cassandra/mail/CassandraMessageDAO.java        |   7 +-
 .../mail/migration/AttachmentV2Migration.java      |   3 +-
 .../mail/CassandraAttachmentFallbackTest.java      |   7 +-
 .../mail/migration/AttachmentV2MigrationTest.java  |  16 +--
 .../java/org/apache/james/blob/api/BlobStore.java  |   2 +
 .../apache/james/blob/api/MetricableBlobStore.java |   5 +
 .../main/java/org/apache/james/blob/api/Store.java |   4 +-
 .../apache/james/blob/api/BlobStoreContract.java   |  52 +++++-----
 .../blob/api/MetricableBlobStoreContract.java      |  24 ++---
 .../james/blob/cassandra/CassandraBlobsDAO.java    |   5 +
 .../blob/cassandra/CassandraBlobsDAOTest.java      |   9 +-
 .../export/file/LocalFileBlobExportMechanism.java  |   3 +-
 .../file/LocalFileBlobExportMechanismTest.java     |  11 +-
 .../apache/james/blob/memory/MemoryBlobStore.java  |  14 +++
 .../james/blob/objectstorage/ContainerName.java    |  63 ------------
 .../blob/objectstorage/ObjectStorageBlobsDAO.java  |  44 ++++----
 .../ObjectStorageBlobsDAOBuilder.java              |  21 ++--
 .../james/blob/objectstorage/PutBlobFunction.java  |   3 +-
 .../blob/objectstorage/aws/AwsS3ObjectStorage.java |  20 ++--
 .../swift/SwiftKeystone2ObjectStorage.java         |   2 +-
 .../swift/SwiftKeystone3ObjectStorage.java         |   2 +-
 .../swift/SwiftTempAuthObjectStorage.java          |   2 +-
 .../blob/objectstorage/ContainerNameTest.java      |  31 ------
 .../blob/objectstorage/DockerAwsS3Singleton.java   |   2 +-
 .../blob/objectstorage/DockerSwiftSingleton.java   |   2 +-
 .../ObjectStorageBlobsDAOContract.java             |   8 +-
 .../objectstorage/ObjectStorageBlobsDAOTest.java   |  56 +++++-----
 .../aws/AwsS3ObjectStorageBlobsDAOBuilderTest.java |  20 ++--
 ...tKeystone2ObjectStorageBlobsDAOBuilderTest.java |  18 ++--
 ...tKeystone3ObjectStorageBlobsDAOBuilderTest.java |  18 ++--
 ...ftTempAuthObjectStorageBlobsDAOBuilderTest.java |  18 ++--
 .../apache/james/blob/union/UnionBlobStore.java    |  12 +++
 .../james/blob/union/UnionBlobStoreTest.java       | 113 +++++++++++++--------
 .../james/blob/mail/MimeMessageStoreTest.java      |   5 +-
 .../ObjectStorageBlobConfiguration.java            |  95 ++++++++++-------
 .../ObjectStorageDependenciesModule.java           |   8 +-
 .../objectstorage/swift/SwiftObjectStorage.java    |   8 +-
 .../ObjectStorageBlobConfigurationTest.java        |  52 +++++++++-
 .../objectstorage/aws/s3/DockerAwsS3TestRule.java  |   8 +-
 .../objectstorage/swift/DockerSwiftTestRule.java   |   8 +-
 .../swift/ObjectStorageBlobConfigurationTest.java  |   8 +-
 .../swift/ObjectStorageBlobStoreModuleTest.java    |  15 ++-
 .../swift/SwiftObjectStorageTest.java              |  14 +--
 .../james/webadmin/vault/routes/ExportService.java |   3 +-
 .../routes/DeletedMessagesVaultRoutesTest.java     |   3 +-
 .../linshare/LinshareBlobExportMechanism.java      |   3 +-
 .../linshare/LinshareBlobExportMechanismTest.java  |   9 +-
 48 files changed, 446 insertions(+), 417 deletions(-)
 delete mode 100644 server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ContainerName.java
 delete mode 100644 server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ContainerNameTest.java


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


[james-project] 02/12: JAMES-2806 Replace ContainerName by BucketName in ObjectStorage Guice

Posted by bt...@apache.org.
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 ae932171dfd9635c3248115fd9b3f4041bd3f539
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Tue Jun 25 15:58:17 2019 +0700

    JAMES-2806 Replace ContainerName by BucketName in ObjectStorage Guice
---
 .../ObjectStorageBlobConfiguration.java              | 20 ++++++++++----------
 .../ObjectStorageDependenciesModule.java             |  2 +-
 .../objectstorage/swift/SwiftObjectStorage.java      |  8 ++++----
 .../objectstorage/aws/s3/DockerAwsS3TestRule.java    |  6 +++---
 .../objectstorage/swift/DockerSwiftTestRule.java     |  6 +++---
 .../swift/ObjectStorageBlobConfigurationTest.java    |  8 ++++----
 .../swift/ObjectStorageBlobStoreModuleTest.java      | 11 +++++------
 .../objectstorage/swift/SwiftObjectStorageTest.java  | 14 +++++++-------
 8 files changed, 37 insertions(+), 38 deletions(-)

diff --git a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfiguration.java b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfiguration.java
index 06520d8..f1fb395 100644
--- a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfiguration.java
+++ b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfiguration.java
@@ -25,7 +25,7 @@ import java.util.Optional;
 
 import org.apache.commons.configuration.Configuration;
 import org.apache.commons.configuration.ConfigurationException;
-import org.apache.james.blob.objectstorage.ContainerName;
+import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.objectstorage.PayloadCodec;
 import org.apache.james.blob.objectstorage.SpecificAuthConfiguration;
 import org.apache.james.modules.objectstorage.aws.s3.AwsS3ConfigurationReader;
@@ -70,7 +70,7 @@ public class ObjectStorageBlobConfiguration {
         return builder()
             .codec(payloadCodecFactory)
             .provider(ObjectStorageProvider.from(provider))
-            .container(ContainerName.of(namespace))
+            .bucketName(BucketName.of(namespace))
             .authConfiguration(authConfiguration(provider, configuration))
             .aesSalt(aesSalt)
             .aesPassword(aesPassword)
@@ -104,7 +104,7 @@ public class ObjectStorageBlobConfiguration {
 
         @FunctionalInterface
         interface RequireContainerName {
-            RequireAuthConfiguration container(ContainerName container);
+            RequireAuthConfiguration bucketName(BucketName bucketName);
         }
 
         @FunctionalInterface
@@ -116,7 +116,7 @@ public class ObjectStorageBlobConfiguration {
 
             private final PayloadCodecFactory payloadCodecFactory;
             private final ObjectStorageProvider provider;
-            private final ContainerName container;
+            private final BucketName bucketName;
             private final SpecificAuthConfiguration specificAuthConfiguration;
 
             private Optional<String> aesSalt;
@@ -124,13 +124,13 @@ public class ObjectStorageBlobConfiguration {
 
             public ReadyToBuild(PayloadCodecFactory payloadCodecFactory,
                                 ObjectStorageProvider provider,
-                                ContainerName container,
+                                BucketName bucketName,
                                 SpecificAuthConfiguration specificAuthConfiguration) {
                 this.aesSalt = Optional.empty();
                 this.aesPassword = Optional.empty();
                 this.payloadCodecFactory = payloadCodecFactory;
                 this.provider = provider;
-                this.container = container;
+                this.bucketName = bucketName;
                 this.specificAuthConfiguration = specificAuthConfiguration;
             }
 
@@ -160,7 +160,7 @@ public class ObjectStorageBlobConfiguration {
                         .orElseThrow(() -> new IllegalStateException("AES code requires an non-empty password parameter"));
                 }
 
-                return new ObjectStorageBlobConfiguration(payloadCodecFactory, provider, container, specificAuthConfiguration, aesSalt, aesPassword);
+                return new ObjectStorageBlobConfiguration(payloadCodecFactory, provider, bucketName, specificAuthConfiguration, aesSalt, aesPassword);
             }
 
         }
@@ -168,7 +168,7 @@ public class ObjectStorageBlobConfiguration {
     }
 
     private final PayloadCodecFactory payloadCodec;
-    private final ContainerName namespace;
+    private final BucketName namespace;
     private final ObjectStorageProvider provider;
     private final SpecificAuthConfiguration specificAuthConfiguration;
     private Optional<String> aesSalt;
@@ -176,7 +176,7 @@ public class ObjectStorageBlobConfiguration {
 
     @VisibleForTesting
     ObjectStorageBlobConfiguration(PayloadCodecFactory payloadCodec, ObjectStorageProvider provider,
-                                   ContainerName namespace,
+                                   BucketName namespace,
                                    SpecificAuthConfiguration specificAuthConfiguration,
                                    Optional<String> aesSalt,
                                    Optional<char[]> aesPassword) {
@@ -188,7 +188,7 @@ public class ObjectStorageBlobConfiguration {
         this.aesPassword = aesPassword;
     }
 
-    public ContainerName getNamespace() {
+    public BucketName getNamespace() {
         return namespace;
     }
 
diff --git a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageDependenciesModule.java b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageDependenciesModule.java
index a2b3953..7f11da9 100644
--- a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageDependenciesModule.java
+++ b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageDependenciesModule.java
@@ -76,7 +76,7 @@ public class ObjectStorageDependenciesModule extends AbstractModule {
         return dao;
     }
 
-    private ObjectStorageBlobsDAOBuilder.RequireContainerName selectDaoBuilder(ObjectStorageBlobConfiguration configuration) {
+    private ObjectStorageBlobsDAOBuilder.RequireBucketName selectDaoBuilder(ObjectStorageBlobConfiguration configuration) {
         switch (configuration.getProvider()) {
             case SWIFT:
                 return SwiftObjectStorage.builder(configuration);
diff --git a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/swift/SwiftObjectStorage.java b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/swift/SwiftObjectStorage.java
index bf5c9da..6cc6a44 100644
--- a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/swift/SwiftObjectStorage.java
+++ b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/swift/SwiftObjectStorage.java
@@ -29,7 +29,7 @@ import org.apache.james.modules.objectstorage.ObjectStorageProvider;
 
 public class SwiftObjectStorage {
 
-    public static ObjectStorageBlobsDAOBuilder.RequireContainerName builder(ObjectStorageBlobConfiguration configuration) {
+    public static ObjectStorageBlobsDAOBuilder.RequireBucketName builder(ObjectStorageBlobConfiguration configuration) {
         if (configuration.getProvider() != ObjectStorageProvider.SWIFT) {
             throw new IllegalArgumentException("unknown provider " + configuration.getProvider());
         }
@@ -52,15 +52,15 @@ public class SwiftObjectStorage {
         }
     }
 
-    public static ObjectStorageBlobsDAOBuilder.RequireContainerName builder(SwiftTempAuthObjectStorage.Configuration testConfig) {
+    public static ObjectStorageBlobsDAOBuilder.RequireBucketName builder(SwiftTempAuthObjectStorage.Configuration testConfig) {
         return SwiftTempAuthObjectStorage.daoBuilder(testConfig);
     }
 
-    public static ObjectStorageBlobsDAOBuilder.RequireContainerName builder(SwiftKeystone2ObjectStorage.Configuration testConfig) {
+    public static ObjectStorageBlobsDAOBuilder.RequireBucketName builder(SwiftKeystone2ObjectStorage.Configuration testConfig) {
         return SwiftKeystone2ObjectStorage.daoBuilder(testConfig);
     }
 
-    public static ObjectStorageBlobsDAOBuilder.RequireContainerName builder(SwiftKeystone3ObjectStorage.Configuration testConfig) {
+    public static ObjectStorageBlobsDAOBuilder.RequireBucketName builder(SwiftKeystone3ObjectStorage.Configuration testConfig) {
         return SwiftKeystone3ObjectStorage.daoBuilder(testConfig);
     }
 }
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java
index 78c1ebf..3dca764 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java
@@ -25,7 +25,7 @@ import javax.inject.Inject;
 
 import org.apache.james.CleanupTasksPerformer;
 import org.apache.james.GuiceModuleTestRule;
-import org.apache.james.blob.objectstorage.ContainerName;
+import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.objectstorage.DockerAwsS3Singleton;
 import org.apache.james.blob.objectstorage.ObjectStorageBlobsDAO;
 import org.apache.james.blob.objectstorage.PayloadCodec;
@@ -105,7 +105,7 @@ public class DockerAwsS3TestRule implements GuiceModuleTestRule {
 
     @Override
     public Module getModule() {
-        ContainerName containerName = ContainerName.of(UUID.randomUUID().toString());
+        BucketName bucketName = BucketName.of(UUID.randomUUID().toString());
         AwsS3AuthConfiguration authConfiguration = AwsS3AuthConfiguration.builder()
             .endpoint(DockerAwsS3Singleton.singleton.getEndpoint())
             .accessKeyId(DockerAwsS3Container.ACCESS_KEY_ID)
@@ -115,7 +115,7 @@ public class DockerAwsS3TestRule implements GuiceModuleTestRule {
         ObjectStorageBlobConfiguration configuration = ObjectStorageBlobConfiguration.builder()
             .codec(payloadCodecFactory)
             .provider(ObjectStorageProvider.AWSS3)
-            .container(containerName)
+            .bucketName(bucketName)
             .authConfiguration(authConfiguration)
             .aesSalt("c603a7327ee3dcbc031d8d34b1096c605feca5e1")
             .aesPassword("dockerAwsS3Encryption".toCharArray())
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/DockerSwiftTestRule.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/DockerSwiftTestRule.java
index 67a2a53..b0c041b 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/DockerSwiftTestRule.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/DockerSwiftTestRule.java
@@ -26,7 +26,7 @@ import javax.inject.Inject;
 
 import org.apache.james.CleanupTasksPerformer;
 import org.apache.james.GuiceModuleTestRule;
-import org.apache.james.blob.objectstorage.ContainerName;
+import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.objectstorage.DockerSwiftRule;
 import org.apache.james.blob.objectstorage.ObjectStorageBlobsDAO;
 import org.apache.james.blob.objectstorage.PayloadCodec;
@@ -106,11 +106,11 @@ public class DockerSwiftTestRule implements GuiceModuleTestRule {
             .endpoint(swiftContainer.dockerSwift().keystoneV2Endpoint())
             .build();
 
-        ContainerName containerName = ContainerName.of(UUID.randomUUID().toString());
+        BucketName bucketName = BucketName.of(UUID.randomUUID().toString());
         ObjectStorageBlobConfiguration configuration = ObjectStorageBlobConfiguration.builder()
             .codec(payloadCodecFactory)
             .provider(ObjectStorageProvider.SWIFT)
-            .container(containerName)
+            .bucketName(bucketName)
             .authConfiguration(new SwiftAuthConfiguration(SwiftKeystone2ObjectStorage.AUTH_API_NAME,
                 Optional.empty(),
                 Optional.of(authConfiguration),
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobConfigurationTest.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobConfigurationTest.java
index 901bb1f..6e159b9 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobConfigurationTest.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobConfigurationTest.java
@@ -26,7 +26,7 @@ import java.util.Optional;
 import java.util.stream.Stream;
 
 import org.apache.commons.configuration.ConfigurationException;
-import org.apache.james.blob.objectstorage.ContainerName;
+import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.objectstorage.swift.Credentials;
 import org.apache.james.blob.objectstorage.swift.DomainName;
 import org.apache.james.blob.objectstorage.swift.IdentityV3;
@@ -97,7 +97,7 @@ class ObjectStorageBlobConfigurationTest {
                 ObjectStorageBlobConfiguration.builder()
                     .codec(PayloadCodecFactory.DEFAULT)
                     .provider(ObjectStorageProvider.SWIFT)
-                    .container(ContainerName.of("foo"))
+                    .bucketName(BucketName.of("foo"))
                     .authConfiguration(new SwiftAuthConfiguration(SwiftTempAuthObjectStorage.AUTH_API_NAME,
                         Optional.of(SwiftTempAuthObjectStorage.configBuilder()
                             .endpoint(URI.create("http://swift/endpoint"))
@@ -130,7 +130,7 @@ class ObjectStorageBlobConfigurationTest {
                 ObjectStorageBlobConfiguration.builder()
                     .codec(PayloadCodecFactory.DEFAULT)
                     .provider(ObjectStorageProvider.SWIFT)
-                    .container(ContainerName.of("foo"))
+                    .bucketName(BucketName.of("foo"))
                     .authConfiguration(new SwiftAuthConfiguration(SwiftKeystone2ObjectStorage.AUTH_API_NAME,
                         Optional.empty(),
                         Optional.of(SwiftKeystone2ObjectStorage.configBuilder()
@@ -162,7 +162,7 @@ class ObjectStorageBlobConfigurationTest {
                 ObjectStorageBlobConfiguration.builder()
                     .codec(PayloadCodecFactory.DEFAULT)
                     .provider(ObjectStorageProvider.SWIFT)
-                    .container(ContainerName.of("foo"))
+                    .bucketName(BucketName.of("foo"))
                     .authConfiguration(new SwiftAuthConfiguration(SwiftKeystone3ObjectStorage.AUTH_API_NAME,
                         Optional.empty(),
                         Optional.empty(),
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobStoreModuleTest.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobStoreModuleTest.java
index a99e704..503b3d1 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobStoreModuleTest.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobStoreModuleTest.java
@@ -28,7 +28,6 @@ import java.util.stream.Stream;
 import org.apache.james.blob.api.BlobStore;
 import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.api.MetricableBlobStore;
-import org.apache.james.blob.objectstorage.ContainerName;
 import org.apache.james.blob.objectstorage.DockerSwift;
 import org.apache.james.blob.objectstorage.DockerSwiftExtension;
 import org.apache.james.blob.objectstorage.ObjectStorageBlobsDAO;
@@ -80,7 +79,7 @@ class ObjectStorageBlobStoreModuleTest {
             ObjectStorageBlobConfiguration tmpAuth = ObjectStorageBlobConfiguration.builder()
                 .codec(PayloadCodecFactory.DEFAULT)
                 .provider(ObjectStorageProvider.SWIFT)
-                .container(generateContainerName())
+                .bucketName(generateBucketName())
                 .authConfiguration(new SwiftAuthConfiguration(SwiftTempAuthObjectStorage.AUTH_API_NAME,
                     Optional.of(SwiftTempAuthObjectStorage.configBuilder()
                         .endpoint(dockerSwift.swiftEndpoint())
@@ -96,7 +95,7 @@ class ObjectStorageBlobStoreModuleTest {
             ObjectStorageBlobConfiguration keystone2 = ObjectStorageBlobConfiguration.builder()
                 .codec(PayloadCodecFactory.DEFAULT)
                 .provider(ObjectStorageProvider.SWIFT)
-                .container(generateContainerName())
+                .bucketName(generateBucketName())
                 .authConfiguration(new SwiftAuthConfiguration(SwiftKeystone2ObjectStorage.AUTH_API_NAME,
                     Optional.empty(),
                     Optional.of(SwiftKeystone2ObjectStorage.configBuilder()
@@ -110,7 +109,7 @@ class ObjectStorageBlobStoreModuleTest {
             ObjectStorageBlobConfiguration keystone3 = ObjectStorageBlobConfiguration.builder()
                 .codec(PayloadCodecFactory.DEFAULT)
                 .provider(ObjectStorageProvider.SWIFT)
-                .container(generateContainerName())
+                .bucketName(generateBucketName())
                 .authConfiguration(new SwiftAuthConfiguration(SwiftKeystone3ObjectStorage.AUTH_API_NAME,
                     Optional.empty(),
                     Optional.empty(),
@@ -125,8 +124,8 @@ class ObjectStorageBlobStoreModuleTest {
         }
     }
 
-    private static ContainerName generateContainerName() {
-        return ContainerName.of(UUID.randomUUID().toString());
+    private static BucketName generateBucketName() {
+        return BucketName.of(UUID.randomUUID().toString());
     }
 
     @ParameterizedTest
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/SwiftObjectStorageTest.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/SwiftObjectStorageTest.java
index 262019a..12411c3 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/SwiftObjectStorageTest.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/SwiftObjectStorageTest.java
@@ -24,7 +24,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import java.util.Optional;
 
 import org.apache.commons.configuration.PropertiesConfiguration;
-import org.apache.james.blob.objectstorage.ContainerName;
+import org.apache.james.blob.api.BucketName;
 import org.apache.james.modules.objectstorage.ObjectStorageBlobConfiguration;
 import org.apache.james.modules.objectstorage.ObjectStorageProvider;
 import org.apache.james.modules.objectstorage.PayloadCodecFactory;
@@ -37,7 +37,7 @@ class SwiftObjectStorageTest {
         ObjectStorageBlobConfiguration objectStorageBlobConfiguration = ObjectStorageBlobConfiguration.builder()
             .codec(PayloadCodecFactory.DEFAULT)
             .provider(ObjectStorageProvider.SWIFT)
-            .container(ContainerName.of("myContainer"))
+            .bucketName(BucketName.of("myContainer"))
             .authConfiguration(new SwiftAuthConfiguration("tmpauth", Optional.empty(), Optional.empty(), Optional.empty()))
             .build();
         assertThatThrownBy(() -> SwiftObjectStorage.builder(objectStorageBlobConfiguration))
@@ -57,7 +57,7 @@ class SwiftObjectStorageTest {
         ObjectStorageBlobConfiguration objectStorageBlobConfiguration = ObjectStorageBlobConfiguration.builder()
             .codec(PayloadCodecFactory.DEFAULT)
             .provider(ObjectStorageProvider.SWIFT)
-            .container(ContainerName.of("myContainer"))
+            .bucketName(BucketName.of("myContainer"))
             .authConfiguration(SwiftAuthConfiguration.from(configuration))
             .build();
         SwiftObjectStorage.builder(objectStorageBlobConfiguration);
@@ -68,7 +68,7 @@ class SwiftObjectStorageTest {
         ObjectStorageBlobConfiguration objectStorageBlobConfiguration = ObjectStorageBlobConfiguration.builder()
             .codec(PayloadCodecFactory.DEFAULT)
             .provider(ObjectStorageProvider.SWIFT)
-            .container(ContainerName.of("myContainer"))
+            .bucketName(BucketName.of("myContainer"))
             .authConfiguration(new SwiftAuthConfiguration("keystone2", Optional.empty(), Optional.empty(), Optional.empty()))
             .build();
         assertThatThrownBy(() -> SwiftObjectStorage.builder(objectStorageBlobConfiguration))
@@ -88,7 +88,7 @@ class SwiftObjectStorageTest {
         ObjectStorageBlobConfiguration objectStorageBlobConfiguration = ObjectStorageBlobConfiguration.builder()
             .codec(PayloadCodecFactory.DEFAULT)
             .provider(ObjectStorageProvider.SWIFT)
-            .container(ContainerName.of("myContainer"))
+            .bucketName(BucketName.of("myContainer"))
             .authConfiguration(SwiftAuthConfiguration.from(configuration))
             .build();
         SwiftObjectStorage.builder(objectStorageBlobConfiguration);
@@ -99,7 +99,7 @@ class SwiftObjectStorageTest {
         ObjectStorageBlobConfiguration objectStorageBlobConfiguration = ObjectStorageBlobConfiguration.builder()
             .codec(PayloadCodecFactory.DEFAULT)
             .provider(ObjectStorageProvider.SWIFT)
-            .container(ContainerName.of("myContainer"))
+            .bucketName(BucketName.of("myContainer"))
             .authConfiguration(new SwiftAuthConfiguration("keystone3", Optional.empty(), Optional.empty(), Optional.empty()))
             .build();
         assertThatThrownBy(() -> SwiftObjectStorage.builder(objectStorageBlobConfiguration))
@@ -119,7 +119,7 @@ class SwiftObjectStorageTest {
         ObjectStorageBlobConfiguration objectStorageBlobConfiguration = ObjectStorageBlobConfiguration.builder()
             .codec(PayloadCodecFactory.DEFAULT)
             .provider(ObjectStorageProvider.SWIFT)
-            .container(ContainerName.of("myContainer"))
+            .bucketName(BucketName.of("myContainer"))
             .authConfiguration(SwiftAuthConfiguration.from(configuration))
             .build();
         SwiftObjectStorage.builder(objectStorageBlobConfiguration);


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


[james-project] 09/12: JAMES-2806 BucketPrefix configuration item in ObjectStorage

Posted by bt...@apache.org.
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 cb9a228af0841d89c7eb6f2ccf215c43926f362b
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Wed Jun 26 16:51:05 2019 +0700

    JAMES-2806 BucketPrefix configuration item in ObjectStorage
---
 .../ObjectStorageBlobConfiguration.java            | 54 +++++++++++++++-------
 .../ObjectStorageBlobConfigurationTest.java        | 23 +++++++++
 2 files changed, 60 insertions(+), 17 deletions(-)

diff --git a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfiguration.java b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfiguration.java
index 05d0193..40752b8 100644
--- a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfiguration.java
+++ b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfiguration.java
@@ -39,15 +39,19 @@ public class ObjectStorageBlobConfiguration {
 
     public static final String OBJECTSTORAGE_CONFIGURATION_NAME = "blobstore";
     private static final String OBJECTSTORAGE_NAMESPACE = "objectstorage.namespace";
+    private static final String OBJECTSTORAGE_BUCKET_PREFIX = "objectstorage.bucketPrefix";
     private static final String OBJECTSTORAGE_PROVIDER = "objectstorage.provider";
     private static final String OBJECTSTORAGE_PAYLOAD_CODEC = "objectstorage.payload.codec";
     public static final String OBJECTSTORAGE_AES256_HEXSALT = "objectstorage.aes256.hexsalt";
     public static final String OBJECTSTORAGE_AES256_PASSWORD = "objectstorage.aes256.password";
 
+    static final String DEFAULT_BUCKET_PREFIX = "";
+
     public static ObjectStorageBlobConfiguration from(Configuration configuration) throws ConfigurationException {
         String provider = configuration.getString(OBJECTSTORAGE_PROVIDER, null);
         String codecName = configuration.getString(OBJECTSTORAGE_PAYLOAD_CODEC, null);
         Optional<String> namespace = Optional.ofNullable(configuration.getString(OBJECTSTORAGE_NAMESPACE, null));
+        Optional<String> bucketPrefix = Optional.ofNullable(configuration.getString(OBJECTSTORAGE_BUCKET_PREFIX, null));
         Optional<String> aesSalt = Optional.ofNullable(configuration.getString(OBJECTSTORAGE_AES256_HEXSALT, null));
         Optional<char[]> aesPassword = Optional.ofNullable(configuration.getString(OBJECTSTORAGE_AES256_PASSWORD, null))
             .map(String::toCharArray);
@@ -71,6 +75,7 @@ public class ObjectStorageBlobConfiguration {
             .aesSalt(aesSalt)
             .aesPassword(aesPassword)
             .defaultBucketName(namespace.map(BucketName::of))
+            .bucketPrefix(bucketPrefix)
             .build();
     }
 
@@ -113,6 +118,7 @@ public class ObjectStorageBlobConfiguration {
             private Optional<String> aesSalt;
             private Optional<char[]> aesPassword;
             private Optional<BucketName> defaultBucketName;
+            private Optional<String> bucketPrefix;
 
             public ReadyToBuild(PayloadCodecFactory payloadCodecFactory,
                                 ObjectStorageProvider provider,
@@ -123,6 +129,7 @@ public class ObjectStorageBlobConfiguration {
                 this.provider = provider;
                 this.specificAuthConfiguration = specificAuthConfiguration;
                 this.defaultBucketName = Optional.empty();
+                this.bucketPrefix = Optional.empty();
             }
 
             public ReadyToBuild aesSalt(String aesSalt) {
@@ -148,6 +155,11 @@ public class ObjectStorageBlobConfiguration {
                 return this;
             }
 
+            public ReadyToBuild bucketPrefix(Optional<String> bucketPrefix) {
+                this.bucketPrefix = bucketPrefix;
+                return this;
+            }
+
             public ObjectStorageBlobConfiguration build() {
                 if (payloadCodecFactory == PayloadCodecFactory.AES256) {
                     aesSalt.filter(s -> !s.isEmpty())
@@ -157,8 +169,9 @@ public class ObjectStorageBlobConfiguration {
                 }
 
                 BucketName defaultBucketName = this.defaultBucketName.orElse(BucketName.DEFAULT);
+                String bucketPrefix = this.bucketPrefix.orElse(DEFAULT_BUCKET_PREFIX);
 
-                return new ObjectStorageBlobConfiguration(payloadCodecFactory, provider, defaultBucketName, specificAuthConfiguration, aesSalt, aesPassword);
+                return new ObjectStorageBlobConfiguration(payloadCodecFactory, bucketPrefix, provider, defaultBucketName, specificAuthConfiguration, aesSalt, aesPassword);
             }
 
         }
@@ -167,18 +180,21 @@ public class ObjectStorageBlobConfiguration {
 
     private final PayloadCodecFactory payloadCodec;
     private final BucketName namespace;
+    private final String bucketPrefix;
     private final ObjectStorageProvider provider;
     private final SpecificAuthConfiguration specificAuthConfiguration;
     private Optional<String> aesSalt;
     private Optional<char[]> aesPassword;
 
     @VisibleForTesting
-    ObjectStorageBlobConfiguration(PayloadCodecFactory payloadCodec, ObjectStorageProvider provider,
+    ObjectStorageBlobConfiguration(PayloadCodecFactory payloadCodec, String bucketPrefix,
+                                   ObjectStorageProvider provider,
                                    BucketName namespace,
                                    SpecificAuthConfiguration specificAuthConfiguration,
                                    Optional<String> aesSalt,
                                    Optional<char[]> aesPassword) {
         this.payloadCodec = payloadCodec;
+        this.bucketPrefix = bucketPrefix;
         this.provider = provider;
         this.namespace = namespace;
         this.specificAuthConfiguration = specificAuthConfiguration;
@@ -214,26 +230,29 @@ public class ObjectStorageBlobConfiguration {
         return aesPassword;
     }
 
+    public String getBucketPrefix() {
+        return bucketPrefix;
+    }
+
     @Override
-    public boolean equals(Object o) {
-        if (this == o) {
-            return true;
-        }
-        if (o == null || getClass() != o.getClass()) {
-            return false;
+    public final boolean equals(Object o) {
+        if (o instanceof ObjectStorageBlobConfiguration) {
+            ObjectStorageBlobConfiguration that = (ObjectStorageBlobConfiguration) o;
+
+            return Objects.equals(this.payloadCodec, that.payloadCodec)
+                && Objects.equals(this.namespace, that.namespace)
+                && Objects.equals(this.bucketPrefix, that.bucketPrefix)
+                && Objects.equals(this.provider, that.provider)
+                && Objects.equals(this.specificAuthConfiguration, that.specificAuthConfiguration)
+                && Objects.equals(this.aesSalt, that.aesSalt)
+                && Objects.equals(this.aesPassword, that.aesPassword);
         }
-        ObjectStorageBlobConfiguration that = (ObjectStorageBlobConfiguration) o;
-        return Objects.equals(payloadCodec, that.payloadCodec) &&
-            Objects.equals(namespace, that.namespace) &&
-            Objects.equals(provider, that.provider) &&
-            Objects.equals(specificAuthConfiguration, that.specificAuthConfiguration) &&
-            Objects.equals(aesSalt, that.aesSalt) &&
-            Objects.equals(aesPassword, that.aesPassword);
+        return false;
     }
 
     @Override
-    public int hashCode() {
-        return Objects.hash(payloadCodec, namespace, provider, specificAuthConfiguration, aesSalt, aesPassword);
+    public final int hashCode() {
+        return Objects.hash(payloadCodec, namespace, bucketPrefix, provider, specificAuthConfiguration, aesSalt, aesPassword);
     }
 
     @Override
@@ -241,6 +260,7 @@ public class ObjectStorageBlobConfiguration {
         return MoreObjects.toStringHelper(this)
             .add("payloadCodec", payloadCodec)
             .add("namespace", namespace)
+            .add("bucketPrefix", bucketPrefix)
             .add("provider", provider)
             .add("specificAuthConfiguration", specificAuthConfiguration)
             .add("aesSalt", aesSalt)
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfigurationTest.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfigurationTest.java
index 30578bc..6bc03b2 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfigurationTest.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfigurationTest.java
@@ -181,4 +181,27 @@ class ObjectStorageBlobConfigurationTest {
             .isEqualTo(BucketName.DEFAULT);
     }
 
+    @Test
+    void fromShouldParseBucketPrefixWhenSpecified() throws Exception {
+        String bucketPrefix = "defaultPrefix";
+        MapConfiguration configuration = new MapConfiguration(
+            ImmutableMap.<String, Object>builder()
+                .putAll(VALID_CONFIGURATION)
+                .put("objectstorage.bucketPrefix", bucketPrefix)
+                .build());
+
+         assertThat(ObjectStorageBlobConfiguration.from(configuration).getBucketPrefix())
+            .isEqualTo(bucketPrefix);
+    }
+
+     @Test
+    void fromShouldUseTheDefaultValueWhenDontSpecifyBucketPrefix() throws Exception {
+        MapConfiguration configuration = new MapConfiguration(
+            ImmutableMap.<String, Object>builder()
+                .putAll(VALID_CONFIGURATION)
+                .build());
+
+         assertThat(ObjectStorageBlobConfiguration.from(configuration).getBucketPrefix())
+            .isEqualTo(ObjectStorageBlobConfiguration.DEFAULT_BUCKET_PREFIX);
+    }
 }
\ No newline at end of file


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


[james-project] 12/12: JAMES-2806 add defaultBucketName configuration option

Posted by bt...@apache.org.
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 44e310843134c666233113810133a2e252dda8d0
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Tue Jul 2 11:48:05 2019 +0700

    JAMES-2806 add defaultBucketName configuration option
---
 .../objectstorage/ObjectStorageBlobConfiguration.java        |  5 +++++
 .../modules/objectstorage/aws/s3/DockerAwsS3TestRule.java    |  3 +--
 .../modules/objectstorage/swift/DockerSwiftTestRule.java     |  2 +-
 .../swift/ObjectStorageBlobConfigurationTest.java            |  6 +++---
 .../swift/ObjectStorageBlobStoreModuleTest.java              |  6 +++---
 .../modules/objectstorage/swift/SwiftObjectStorageTest.java  | 12 ++++++------
 6 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfiguration.java b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfiguration.java
index 40752b8..cb1d694 100644
--- a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfiguration.java
+++ b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfiguration.java
@@ -155,6 +155,11 @@ public class ObjectStorageBlobConfiguration {
                 return this;
             }
 
+            public ReadyToBuild defaultBucketName(BucketName defaultBucketName) {
+                this.defaultBucketName = Optional.of(defaultBucketName);
+                return this;
+            }
+
             public ReadyToBuild bucketPrefix(Optional<String> bucketPrefix) {
                 this.bucketPrefix = bucketPrefix;
                 return this;
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java
index e9c4bef..72112cd 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java
@@ -19,7 +19,6 @@
 
 package org.apache.james.modules.objectstorage.aws.s3;
 
-import java.util.Optional;
 import java.util.UUID;
 
 import javax.inject.Inject;
@@ -119,7 +118,7 @@ public class DockerAwsS3TestRule implements GuiceModuleTestRule {
             .authConfiguration(authConfiguration)
             .aesSalt("c603a7327ee3dcbc031d8d34b1096c605feca5e1")
             .aesPassword("dockerAwsS3Encryption".toCharArray())
-            .defaultBucketName(Optional.of(defaultBucketName))
+            .defaultBucketName(defaultBucketName)
             .build();
 
         return binder -> {
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/DockerSwiftTestRule.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/DockerSwiftTestRule.java
index 0e4c2db..02a12c7 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/DockerSwiftTestRule.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/DockerSwiftTestRule.java
@@ -116,7 +116,7 @@ public class DockerSwiftTestRule implements GuiceModuleTestRule {
                 Optional.empty()))
             .aesSalt("c603a7327ee3dcbc031d8d34b1096c605feca5e1")
             .aesPassword("dockerSwiftEncryption".toCharArray())
-            .defaultBucketName(Optional.of(defaultBucketName))
+            .defaultBucketName(defaultBucketName)
             .build();
 
         return binder -> {
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobConfigurationTest.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobConfigurationTest.java
index 5b777c7..e158c08 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobConfigurationTest.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobConfigurationTest.java
@@ -108,7 +108,7 @@ class ObjectStorageBlobConfigurationTest {
                             .build()),
                         Optional.empty(),
                         Optional.empty()))
-                    .defaultBucketName(Optional.of(BucketName.of("foo")))
+                    .defaultBucketName(BucketName.of("foo"))
                     .build());
     }
 
@@ -139,7 +139,7 @@ class ObjectStorageBlobConfigurationTest {
                             .tenantName(TenantName.of("test"))
                             .build()),
                         Optional.empty()))
-                    .defaultBucketName(Optional.of(BucketName.of("foo")))
+                    .defaultBucketName(BucketName.of("foo"))
                     .build());
     }
 
@@ -171,7 +171,7 @@ class ObjectStorageBlobConfigurationTest {
                             .project(Project.of(ProjectName.of("test")))
                             .identity(IdentityV3.of(DomainName.of("Default"), UserName.of("demo")))
                             .build())))
-                    .defaultBucketName(Optional.of(BucketName.of("foo")))
+                    .defaultBucketName(BucketName.of("foo"))
                     .build());
     }
 
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobStoreModuleTest.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobStoreModuleTest.java
index 38bafac..8858216 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobStoreModuleTest.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobStoreModuleTest.java
@@ -90,7 +90,7 @@ class ObjectStorageBlobStoreModuleTest {
                         .build()),
                     Optional.empty(),
                     Optional.empty()))
-                .defaultBucketName(Optional.of(generateBucketName()))
+                .defaultBucketName(generateBucketName())
                 .build();
             ObjectStorageBlobConfiguration keystone2 = ObjectStorageBlobConfiguration.builder()
                 .codec(PayloadCodecFactory.DEFAULT)
@@ -104,7 +104,7 @@ class ObjectStorageBlobStoreModuleTest {
                         .tenantName(TenantName.of("test"))
                         .build()),
                     Optional.empty()))
-                .defaultBucketName(Optional.of(generateBucketName()))
+                .defaultBucketName(generateBucketName())
                 .build();
             ObjectStorageBlobConfiguration keystone3 = ObjectStorageBlobConfiguration.builder()
                 .codec(PayloadCodecFactory.DEFAULT)
@@ -118,7 +118,7 @@ class ObjectStorageBlobStoreModuleTest {
                         .project(Project.of(ProjectName.of("test")))
                         .identity(IdentityV3.of(DomainName.of("Default"), UserName.of("demo")))
                         .build())))
-                .defaultBucketName(Optional.of(generateBucketName()))
+                .defaultBucketName(generateBucketName())
                 .build();
             return Stream.of(tmpAuth, keystone2, keystone3).map(Arguments::of);
         }
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/SwiftObjectStorageTest.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/SwiftObjectStorageTest.java
index 8e872f9..1bab6b3 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/SwiftObjectStorageTest.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/SwiftObjectStorageTest.java
@@ -38,7 +38,7 @@ class SwiftObjectStorageTest {
             .codec(PayloadCodecFactory.DEFAULT)
             .provider(ObjectStorageProvider.SWIFT)
             .authConfiguration(new SwiftAuthConfiguration("tmpauth", Optional.empty(), Optional.empty(), Optional.empty()))
-            .defaultBucketName(Optional.of(BucketName.of("myBucket")))
+            .defaultBucketName(BucketName.of("myBucket"))
             .build();
         assertThatThrownBy(() -> SwiftObjectStorage.builder(objectStorageBlobConfiguration))
             .isInstanceOf(IllegalArgumentException.class)
@@ -58,7 +58,7 @@ class SwiftObjectStorageTest {
             .codec(PayloadCodecFactory.DEFAULT)
             .provider(ObjectStorageProvider.SWIFT)
             .authConfiguration(SwiftAuthConfiguration.from(configuration))
-            .defaultBucketName(Optional.of(BucketName.of("myBucket")))
+            .defaultBucketName(BucketName.of("myBucket"))
             .build();
         SwiftObjectStorage.builder(objectStorageBlobConfiguration);
     }
@@ -69,7 +69,7 @@ class SwiftObjectStorageTest {
             .codec(PayloadCodecFactory.DEFAULT)
             .provider(ObjectStorageProvider.SWIFT)
             .authConfiguration(new SwiftAuthConfiguration("keystone2", Optional.empty(), Optional.empty(), Optional.empty()))
-            .defaultBucketName(Optional.of(BucketName.of("myBucket")))
+            .defaultBucketName(BucketName.of("myBucket"))
             .build();
         assertThatThrownBy(() -> SwiftObjectStorage.builder(objectStorageBlobConfiguration))
             .isInstanceOf(IllegalArgumentException.class)
@@ -89,7 +89,7 @@ class SwiftObjectStorageTest {
             .codec(PayloadCodecFactory.DEFAULT)
             .provider(ObjectStorageProvider.SWIFT)
             .authConfiguration(SwiftAuthConfiguration.from(configuration))
-            .defaultBucketName(Optional.of(BucketName.of("myBucket")))
+            .defaultBucketName(BucketName.of("myBucket"))
             .build();
         SwiftObjectStorage.builder(objectStorageBlobConfiguration);
     }
@@ -100,7 +100,7 @@ class SwiftObjectStorageTest {
             .codec(PayloadCodecFactory.DEFAULT)
             .provider(ObjectStorageProvider.SWIFT)
             .authConfiguration(new SwiftAuthConfiguration("keystone3", Optional.empty(), Optional.empty(), Optional.empty()))
-            .defaultBucketName(Optional.of(BucketName.of("myBucket")))
+            .defaultBucketName(BucketName.of("myBucket"))
             .build();
         assertThatThrownBy(() -> SwiftObjectStorage.builder(objectStorageBlobConfiguration))
             .isInstanceOf(IllegalArgumentException.class)
@@ -120,7 +120,7 @@ class SwiftObjectStorageTest {
             .codec(PayloadCodecFactory.DEFAULT)
             .provider(ObjectStorageProvider.SWIFT)
             .authConfiguration(SwiftAuthConfiguration.from(configuration))
-            .defaultBucketName(Optional.of(BucketName.of("myBucket")))
+            .defaultBucketName(BucketName.of("myBucket"))
             .build();
         SwiftObjectStorage.builder(objectStorageBlobConfiguration);
     }


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


[james-project] 04/12: JAMES-2806 Temporary use BucketName.DEFAULT for BlobStore impls

Posted by bt...@apache.org.
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 6c098b636aa4f4a486fb000f5c44efae6c9cb560
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Wed Jun 26 15:37:43 2019 +0700

    JAMES-2806 Temporary use BucketName.DEFAULT for BlobStore impls
    
    Except the ObjectStorage BlobStore because it is the subject of this task,
    other implementation will be rework later
---
 .../apache/james/blob/api/MetricableBlobStore.java |  5 +++++
 .../james/blob/cassandra/CassandraBlobsDAO.java    |  5 +++++
 .../apache/james/blob/memory/MemoryBlobStore.java  | 14 +++++++++++++
 .../apache/james/blob/union/UnionBlobStore.java    | 12 +++++++++++
 .../james/blob/union/UnionBlobStoreTest.java       | 23 ++++++++++++++++++++++
 5 files changed, 59 insertions(+)

diff --git a/server/blob/blob-api/src/main/java/org/apache/james/blob/api/MetricableBlobStore.java b/server/blob/blob-api/src/main/java/org/apache/james/blob/api/MetricableBlobStore.java
index 11fd997..73ccb4d 100644
--- a/server/blob/blob-api/src/main/java/org/apache/james/blob/api/MetricableBlobStore.java
+++ b/server/blob/blob-api/src/main/java/org/apache/james/blob/api/MetricableBlobStore.java
@@ -77,4 +77,9 @@ public class MetricableBlobStore implements BlobStore {
         return metricFactory
             .runPublishingTimerMetric(DELETE_TIMER_NAME, () -> blobStoreImpl.deleteBucket(bucketName));
     }
+
+    @Override
+    public BucketName getDefaultBucketName() {
+        return blobStoreImpl.getDefaultBucketName();
+    }
 }
diff --git a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobsDAO.java b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobsDAO.java
index 38edc21..923af0d 100644
--- a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobsDAO.java
+++ b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobsDAO.java
@@ -202,6 +202,11 @@ public class CassandraBlobsDAO implements BlobStore {
         return pipedInputStream;
     }
 
+    @Override
+    public BucketName getDefaultBucketName() {
+        return BucketName.DEFAULT;
+    }
+
     private Flux<byte[]> readBlobParts(BlobId blobId) {
         Integer rowCount = selectRowCount(blobId)
             .publishOn(Schedulers.elastic())
diff --git a/server/blob/blob-memory/src/main/java/org/apache/james/blob/memory/MemoryBlobStore.java b/server/blob/blob-memory/src/main/java/org/apache/james/blob/memory/MemoryBlobStore.java
index 812ea3d..d6b3a25 100644
--- a/server/blob/blob-memory/src/main/java/org/apache/james/blob/memory/MemoryBlobStore.java
+++ b/server/blob/blob-memory/src/main/java/org/apache/james/blob/memory/MemoryBlobStore.java
@@ -32,6 +32,7 @@ import org.apache.james.blob.api.BlobStore;
 import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.api.ObjectStoreException;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.HashBasedTable;
 import com.google.common.collect.Table;
@@ -40,11 +41,18 @@ import reactor.core.publisher.Mono;
 
 public class MemoryBlobStore implements BlobStore {
     private final BlobId.Factory factory;
+    private final BucketName defaultBucketName;
     private final Table<BucketName, BlobId, byte[]> blobs;
 
     @Inject
     public MemoryBlobStore(BlobId.Factory factory) {
+        this(factory, BucketName.DEFAULT);
+    }
+
+    @VisibleForTesting
+    public MemoryBlobStore(BlobId.Factory factory, BucketName defaultBucketName) {
         this.factory = factory;
+        this.defaultBucketName = defaultBucketName;
         blobs = HashBasedTable.create();
     }
 
@@ -104,4 +112,10 @@ public class MemoryBlobStore implements BlobStore {
                 .orElseThrow(() -> new ObjectStoreException("Unable to find blob with id " + blobId + " in bucket " + bucketName.asString()));
         }
     }
+
+    @Override
+    public BucketName getDefaultBucketName() {
+        return defaultBucketName;
+    }
+
 }
diff --git a/server/blob/blob-union/src/main/java/org/apache/james/blob/union/UnionBlobStore.java b/server/blob/blob-union/src/main/java/org/apache/james/blob/union/UnionBlobStore.java
index 444c185..74481de 100644
--- a/server/blob/blob-union/src/main/java/org/apache/james/blob/union/UnionBlobStore.java
+++ b/server/blob/blob-union/src/main/java/org/apache/james/blob/union/UnionBlobStore.java
@@ -35,6 +35,7 @@ import org.slf4j.LoggerFactory;
 import com.github.fge.lambdas.Throwing;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.MoreObjects;
+import com.google.common.base.Preconditions;
 
 import reactor.core.publisher.Mono;
 
@@ -106,6 +107,17 @@ public class UnionBlobStore implements BlobStore {
     }
 
     @Override
+    public BucketName getDefaultBucketName() {
+        Preconditions.checkState(
+            currentBlobStore.getDefaultBucketName()
+                .equals(legacyBlobStore.getDefaultBucketName()),
+            "currentBlobStore and legacyBlobStore doen't have same defaultBucketName which could lead to " +
+                "unexpected result when interact with other APIs");
+
+        return currentBlobStore.getDefaultBucketName();
+    }
+
+    @Override
     public Mono<BlobId> save(BucketName bucketName, InputStream data) {
         try {
             return saveToCurrentFallbackIfFails(
diff --git a/server/blob/blob-union/src/test/java/org/apache/james/blob/union/UnionBlobStoreTest.java b/server/blob/blob-union/src/test/java/org/apache/james/blob/union/UnionBlobStoreTest.java
index 1789129..abda30a 100644
--- a/server/blob/blob-union/src/test/java/org/apache/james/blob/union/UnionBlobStoreTest.java
+++ b/server/blob/blob-union/src/test/java/org/apache/james/blob/union/UnionBlobStoreTest.java
@@ -67,6 +67,11 @@ class UnionBlobStoreTest implements BlobStoreContract {
         }
 
         @Override
+        public BucketName getDefaultBucketName() {
+            throw new RuntimeException("broken everywhere");
+        }
+
+        @Override
         public Mono<BlobId> save(BucketName bucketName, InputStream data) {
             return Mono.error(new RuntimeException("broken everywhere"));
         }
@@ -106,6 +111,11 @@ class UnionBlobStoreTest implements BlobStoreContract {
         }
 
         @Override
+        public BucketName getDefaultBucketName() {
+            throw new RuntimeException("broken everywhere");
+        }
+
+        @Override
         public Mono<BlobId> save(BucketName bucketName, InputStream data) {
             throw new RuntimeException("broken everywhere");
         }
@@ -528,4 +538,17 @@ class UnionBlobStoreTest implements BlobStoreContract {
         assertThatCode(() -> unionBlobStore.deleteBucket(BucketName.DEFAULT).block())
             .doesNotThrowAnyException();
     }
+
+    @Test
+    void getDefaultBucketNameShouldThrowWhenBlobStoreDontShareTheSameDefaultBucketName() {
+        currentBlobStore = new MemoryBlobStore(BLOB_ID_FACTORY, BucketName.of("current"));
+        legacyBlobStore = new MemoryBlobStore(BLOB_ID_FACTORY, BucketName.of("legacy"));
+        unionBlobStore = UnionBlobStore.builder()
+            .current(currentBlobStore)
+            .legacy(legacyBlobStore)
+            .build();
+
+        assertThatThrownBy(() -> unionBlobStore.getDefaultBucketName())
+            .isInstanceOf(IllegalStateException.class);
+    }
 }


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


[james-project] 07/12: JAMES-2806 Rework delete & create bucket in ObjectStorageDAO

Posted by bt...@apache.org.
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 85f0a621aef967cd2d4204691ebd4321e75362a1
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Wed Jun 26 16:28:49 2019 +0700

    JAMES-2806 Rework delete & create bucket in ObjectStorageDAO
---
 .../apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java |  6 +++---
 .../blob/objectstorage/ObjectStorageBlobsDAOContract.java      |  2 +-
 .../james/blob/objectstorage/ObjectStorageBlobsDAOTest.java    | 10 +++++-----
 .../modules/objectstorage/ObjectStorageDependenciesModule.java |  2 +-
 .../modules/objectstorage/aws/s3/DockerAwsS3TestRule.java      |  2 +-
 .../james/modules/objectstorage/swift/DockerSwiftTestRule.java |  2 +-
 .../objectstorage/swift/ObjectStorageBlobStoreModuleTest.java  |  2 +-
 7 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java
index c288f6b..7cecf82 100644
--- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java
+++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java
@@ -85,7 +85,7 @@ public class ObjectStorageBlobsDAO implements BlobStore {
         return AwsS3ObjectStorage.daoBuilder(testConfig);
     }
 
-    public Mono<BucketName> createContainer(BucketName name) {
+    public Mono<BucketName> createBucket(BucketName name) {
         return Mono.fromCallable(() -> blobStore.createContainerInLocation(DEFAULT_LOCATION, name.asString()))
             .filter(created -> created == false)
             .doOnNext(ignored -> LOGGER.debug("{} already existed", name))
@@ -171,8 +171,8 @@ public class ObjectStorageBlobsDAO implements BlobStore {
         return defaultBucketName;
     }
 
-    public void deleteContainer() {
-        blobStore.deleteContainer(defaultBucketName.asString());
+    public void deleteContainer(BucketName bucketName) {
+        blobStore.deleteContainer(bucketName.asString());
     }
 
     public PayloadCodec getPayloadCodec() {
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOContract.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOContract.java
index 883416f..ba597e2 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOContract.java
+++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOContract.java
@@ -37,7 +37,7 @@ public interface ObjectStorageBlobsDAOContract {
 
     default void assertBlobsDAOCanStoreAndRetrieve(ObjectStorageBlobsDAOBuilder.ReadyToBuild builder) {
         ObjectStorageBlobsDAO dao = builder.build();
-        dao.createContainer(bucketName()).block();
+        dao.createBucket(bucketName()).block();
 
         BlobId blobId = dao.save(BucketName.DEFAULT, CONTENT).block();
 
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOTest.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOTest.java
index 44cbf99..ad794fe 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOTest.java
+++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOTest.java
@@ -91,7 +91,7 @@ public class ObjectStorageBlobsDAOTest implements MetricableBlobStoreContract {
             .blobIdFactory(blobIdFactory);
         blobStore = daoBuilder.getSupplier().get();
         objectStorageBlobsDAO = daoBuilder.build();
-        objectStorageBlobsDAO.createContainer(bucketName).block();
+        objectStorageBlobsDAO.createBucket(bucketName).block();
         testee = new MetricableBlobStore(metricsTestExtension.getMetricFactory(), objectStorageBlobsDAO);
     }
 
@@ -120,7 +120,7 @@ public class ObjectStorageBlobsDAOTest implements MetricableBlobStoreContract {
     @Test
     void createContainerShouldMakeTheContainerToExist() {
         BucketName bucketName = BucketName.of(UUID.randomUUID().toString());
-        objectStorageBlobsDAO.createContainer(bucketName).block();
+        objectStorageBlobsDAO.createBucket(bucketName).block();
         assertThat(blobStore.containerExists(bucketName.asString())).isTrue();
     }
 
@@ -128,8 +128,8 @@ public class ObjectStorageBlobsDAOTest implements MetricableBlobStoreContract {
     void createContainerShouldNotFailWithRuntimeExceptionWhenCreateContainerTwice() {
         BucketName bucketName = BucketName.of(UUID.randomUUID().toString());
 
-        objectStorageBlobsDAO.createContainer(bucketName).block();
-        assertThatCode(() -> objectStorageBlobsDAO.createContainer(bucketName).block())
+        objectStorageBlobsDAO.createBucket(bucketName).block();
+        assertThatCode(() -> objectStorageBlobsDAO.createBucket(bucketName).block())
             .doesNotThrowAnyException();
     }
 
@@ -172,7 +172,7 @@ public class ObjectStorageBlobsDAOTest implements MetricableBlobStoreContract {
 
     @Test
     void deleteContainerShouldDeleteSwiftContainer() {
-        objectStorageBlobsDAO.deleteContainer();
+        objectStorageBlobsDAO.deleteContainer(bucketName);
         assertThat(blobStore.containerExists(bucketName.asString()))
             .isFalse();
     }
diff --git a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageDependenciesModule.java b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageDependenciesModule.java
index 94718d0..550238e 100644
--- a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageDependenciesModule.java
+++ b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageDependenciesModule.java
@@ -72,7 +72,7 @@ public class ObjectStorageDependenciesModule extends AbstractModule {
             .payloadCodec(configuration.getPayloadCodec())
             .putBlob(putBlob(blobIdFactory, configuration, awsS3ObjectStorageProvider))
             .build();
-        dao.createContainer(dao.getDefaultBucketName()).block(Duration.ofMinutes(1));
+        dao.createBucket(dao.getDefaultBucketName()).block(Duration.ofMinutes(1));
         return dao;
     }
 
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java
index 3dca764..b8bf038 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java
@@ -68,7 +68,7 @@ public class DockerAwsS3TestRule implements GuiceModuleTestRule {
 
         @Override
         public Result run() {
-            blobsDAO.deleteContainer();
+            blobsDAO.deleteContainer(blobsDAO.getDefaultBucketName());
 
             return Result.COMPLETED;
         }
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/DockerSwiftTestRule.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/DockerSwiftTestRule.java
index b0c041b..7f08fe1 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/DockerSwiftTestRule.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/DockerSwiftTestRule.java
@@ -71,7 +71,7 @@ public class DockerSwiftTestRule implements GuiceModuleTestRule {
 
         @Override
         public Result run() {
-            blobsDAO.deleteContainer();
+            blobsDAO.deleteContainer(blobsDAO.getDefaultBucketName());
 
             return Result.COMPLETED;
         }
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobStoreModuleTest.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobStoreModuleTest.java
index 476c6d5..e27f990 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobStoreModuleTest.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobStoreModuleTest.java
@@ -137,7 +137,7 @@ class ObjectStorageBlobStoreModuleTest {
                 .with(binder -> binder.bind(ObjectStorageBlobConfiguration.class).toInstance(configuration)));
 
         ObjectStorageBlobsDAO dao = injector.getInstance(ObjectStorageBlobsDAO.class);
-        dao.createContainer(dao.getDefaultBucketName()).block();
+        dao.createBucket(dao.getDefaultBucketName()).block();
 
         BlobStore blobStore = injector.getInstance(Key.get(BlobStore.class, Names.named(MetricableBlobStore.BLOB_STORE_IMPLEMENTATION)));
 


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


[james-project] 11/12: JAMES-2806 Fix rename method in ObjectStorageDAO

Posted by bt...@apache.org.
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 8c4b99d6058dba610e7608ae372d4ab43cefcccf
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Fri Jun 28 11:53:09 2019 +0700

    JAMES-2806 Fix rename method in ObjectStorageDAO
---
 .../james/blob/objectstorage/ObjectStorageBlobsDAO.java     | 13 +++++--------
 .../james/blob/objectstorage/ObjectStorageBlobsDAOTest.java |  8 ++++----
 .../modules/objectstorage/aws/s3/DockerAwsS3TestRule.java   |  2 +-
 .../modules/objectstorage/swift/DockerSwiftTestRule.java    |  2 +-
 4 files changed, 11 insertions(+), 14 deletions(-)

diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java
index 7cecf82..cdfc166 100644
--- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java
+++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java
@@ -24,7 +24,6 @@ import java.io.InputStream;
 import java.util.Optional;
 
 import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang3.NotImplementedException;
 import org.apache.james.blob.api.BlobId;
 import org.apache.james.blob.api.BlobStore;
 import org.apache.james.blob.api.BucketName;
@@ -45,6 +44,7 @@ import com.google.common.hash.Hashing;
 import com.google.common.hash.HashingInputStream;
 
 import reactor.core.publisher.Mono;
+import reactor.core.scheduler.Schedulers;
 
 public class ObjectStorageBlobsDAO implements BlobStore {
     private static final Location DEFAULT_LOCATION = null;
@@ -162,17 +162,14 @@ public class ObjectStorageBlobsDAO implements BlobStore {
     }
 
     @Override
-    public Mono<Void> deleteBucket(BucketName bucketName) {
-        throw new NotImplementedException("not implemented");
-    }
-
-    @Override
     public BucketName getDefaultBucketName() {
         return defaultBucketName;
     }
 
-    public void deleteContainer(BucketName bucketName) {
-        blobStore.deleteContainer(bucketName.asString());
+    @Override
+    public Mono<Void> deleteBucket(BucketName bucketName) {
+        return Mono.<Void>fromRunnable(() -> blobStore.deleteContainer(bucketName.asString()))
+            .subscribeOn(Schedulers.elastic());
     }
 
     public PayloadCodec getPayloadCodec() {
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOTest.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOTest.java
index 14772bb..12f11b8 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOTest.java
+++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOTest.java
@@ -118,14 +118,14 @@ public class ObjectStorageBlobsDAOTest implements MetricableBlobStoreContract {
     }
 
     @Test
-    void createContainerShouldMakeTheContainerToExist() {
+    void createBucketShouldMakeTheContainerToExist() {
         BucketName bucketName = BucketName.of(UUID.randomUUID().toString());
         objectStorageBlobsDAO.createBucket(bucketName).block();
         assertThat(blobStore.containerExists(bucketName.asString())).isTrue();
     }
 
     @Test
-    void createContainerShouldNotFailWithRuntimeExceptionWhenCreateContainerTwice() {
+    void createBucketShouldNotFailWithRuntimeExceptionWhenCreateBucketTwice() {
         BucketName bucketName = BucketName.of(UUID.randomUUID().toString());
 
         objectStorageBlobsDAO.createBucket(bucketName).block();
@@ -171,8 +171,8 @@ public class ObjectStorageBlobsDAOTest implements MetricableBlobStoreContract {
     }
 
     @Test
-    void deleteContainerShouldDeleteSwiftContainer() {
-        objectStorageBlobsDAO.deleteContainer(defaultBucketName);
+    void deleteBucketShouldDeleteSwiftContainer() {
+        objectStorageBlobsDAO.deleteBucket(defaultBucketName).block();
         assertThat(blobStore.containerExists(defaultBucketName.asString()))
             .isFalse();
     }
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java
index 6f2b8e3..e9c4bef 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java
@@ -69,7 +69,7 @@ public class DockerAwsS3TestRule implements GuiceModuleTestRule {
 
         @Override
         public Result run() {
-            blobsDAO.deleteContainer(blobsDAO.getDefaultBucketName());
+            blobsDAO.deleteBucket(blobsDAO.getDefaultBucketName()).block();
 
             return Result.COMPLETED;
         }
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/DockerSwiftTestRule.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/DockerSwiftTestRule.java
index d706221..0e4c2db 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/DockerSwiftTestRule.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/DockerSwiftTestRule.java
@@ -71,7 +71,7 @@ public class DockerSwiftTestRule implements GuiceModuleTestRule {
 
         @Override
         public Result run() {
-            blobsDAO.deleteContainer(blobsDAO.getDefaultBucketName());
+            blobsDAO.deleteBucket(blobsDAO.getDefaultBucketName()).block();
 
             return Result.COMPLETED;
         }


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


[james-project] 06/12: JAMES-2806 PutBlobFunction should have one more parameter of BucketName

Posted by bt...@apache.org.
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 c3b05b116c4dabb3601109a0de35bf7c0e2a2a8e
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Wed Jun 26 16:22:16 2019 +0700

    JAMES-2806 PutBlobFunction should have one more parameter of BucketName
---
 .../james/blob/objectstorage/ObjectStorageBlobsDAO.java    | 14 +++++++-------
 .../blob/objectstorage/ObjectStorageBlobsDAOBuilder.java   |  2 +-
 .../apache/james/blob/objectstorage/PutBlobFunction.java   |  3 ++-
 .../james/blob/objectstorage/aws/AwsS3ObjectStorage.java   |  4 ++--
 .../blob/objectstorage/ObjectStorageBlobsDAOTest.java      |  2 +-
 .../aws/AwsS3ObjectStorageBlobsDAOBuilderTest.java         |  6 ++----
 .../SwiftKeystone2ObjectStorageBlobsDAOBuilderTest.java    |  3 +--
 .../SwiftKeystone3ObjectStorageBlobsDAOBuilderTest.java    |  3 +--
 .../SwiftTempAuthObjectStorageBlobsDAOBuilderTest.java     |  3 +--
 .../objectstorage/ObjectStorageDependenciesModule.java     |  2 +-
 10 files changed, 19 insertions(+), 23 deletions(-)

diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java
index 0507935..c288f6b 100644
--- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java
+++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java
@@ -113,14 +113,14 @@ public class ObjectStorageBlobsDAO implements BlobStore {
 
         BlobId tmpId = blobIdFactory.randomId();
         return save(bucketName, data, tmpId)
-            .flatMap(id -> updateBlobId(tmpId, id));
+            .flatMap(id -> updateBlobId(bucketName, tmpId, id));
     }
 
-    private Mono<BlobId> updateBlobId(BlobId from, BlobId to) {
-        String bucketName = this.defaultBucketName.asString();
+    private Mono<BlobId> updateBlobId(BucketName bucketName, BlobId from, BlobId to) {
+        String bucketNameAsString = bucketName.asString();
         return Mono
-            .fromCallable(() -> blobStore.copyBlob(bucketName, from.asString(), bucketName, to.asString(), CopyOptions.NONE))
-            .then(Mono.fromRunnable(() -> blobStore.removeBlob(bucketName, from.asString())))
+            .fromCallable(() -> blobStore.copyBlob(bucketNameAsString, from.asString(), bucketNameAsString, to.asString(), CopyOptions.NONE))
+            .then(Mono.fromRunnable(() -> blobStore.removeBlob(bucketNameAsString, from.asString())))
             .thenReturn(to);
     }
 
@@ -136,7 +136,7 @@ public class ObjectStorageBlobsDAO implements BlobStore {
     }
 
     private Mono<Void> save(BucketName bucketName, Blob blob) {
-        return Mono.fromRunnable(() -> putBlobFunction.putBlob(blob));
+        return Mono.fromRunnable(() -> putBlobFunction.putBlob(bucketName, blob));
     }
 
     @Override
@@ -146,7 +146,7 @@ public class ObjectStorageBlobsDAO implements BlobStore {
 
     @Override
     public InputStream read(BucketName bucketName, BlobId blobId) throws ObjectStoreException {
-        Blob blob = blobStore.getBlob(this.defaultBucketName.asString(), blobId.asString());
+        Blob blob = blobStore.getBlob(bucketName.asString(), blobId.asString());
 
         try {
             if (blob != null) {
diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOBuilder.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOBuilder.java
index 4b8d212..11cef30 100644
--- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOBuilder.java
+++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOBuilder.java
@@ -90,7 +90,7 @@ public class ObjectStorageBlobsDAOBuilder {
         }
 
         private PutBlobFunction defaultPutBlob(BlobStore blobStore) {
-            return (blob) -> blobStore.putBlob(defaultBucketName.asString(), blob);
+            return (bucketName, blob) -> blobStore.putBlob(bucketName.asString(), blob);
         }
 
         @VisibleForTesting
diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/PutBlobFunction.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/PutBlobFunction.java
index ac58aef..6bae45d 100644
--- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/PutBlobFunction.java
+++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/PutBlobFunction.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.blob.objectstorage;
 
+import org.apache.james.blob.api.BucketName;
 import org.jclouds.blobstore.domain.Blob;
 
 /**
@@ -33,5 +34,5 @@ import org.jclouds.blobstore.domain.Blob;
 @FunctionalInterface
 public interface PutBlobFunction {
 
-    void putBlob(Blob blob);
+    void putBlob(BucketName bucketName, Blob blob);
 }
diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorage.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorage.java
index 257e40c..3d4a3b3 100644
--- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorage.java
+++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorage.java
@@ -93,8 +93,8 @@ public class AwsS3ObjectStorage {
         return ObjectStorageBlobsDAOBuilder.forBlobStore(new BlobStoreBuilder(configuration));
     }
 
-    public Optional<PutBlobFunction> putBlob(BucketName bucketName, AwsS3AuthConfiguration configuration) {
-        return Optional.of((blob) -> {
+    public Optional<PutBlobFunction> putBlob(AwsS3AuthConfiguration configuration) {
+        return Optional.of((bucketName, blob) -> {
             File file = null;
             try {
                 file = File.createTempFile(UUID.randomUUID().toString(), ".tmp");
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOTest.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOTest.java
index e4f83d1..44cbf99 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOTest.java
+++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOTest.java
@@ -76,7 +76,7 @@ public class ObjectStorageBlobsDAOTest implements MetricableBlobStoreContract {
 
     @BeforeEach
     void setUp(DockerSwift dockerSwift) {
-        bucketName = BucketName.of(UUID.randomUUID().toString());
+        bucketName = BucketName.DEFAULT;
         testConfig = SwiftTempAuthObjectStorage.configBuilder()
             .endpoint(dockerSwift.swiftEndpoint())
             .identity(SWIFT_IDENTITY)
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorageBlobsDAOBuilderTest.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorageBlobsDAOBuilderTest.java
index 3db7533..3501086 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorageBlobsDAOBuilderTest.java
+++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorageBlobsDAOBuilderTest.java
@@ -21,8 +21,6 @@ package org.apache.james.blob.objectstorage.aws;
 
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
-import java.util.UUID;
-
 import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.api.HashBlobId;
 import org.apache.james.blob.objectstorage.ObjectStorageBlobsDAO;
@@ -43,7 +41,7 @@ class AwsS3ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlobsDAOCont
     @BeforeEach
     void setUp(DockerAwsS3Container dockerAwsS3Container) {
         awsS3ObjectStorage = new AwsS3ObjectStorage();
-        bucketName = BucketName.of(UUID.randomUUID().toString());
+        bucketName = BucketName.DEFAULT;
         configuration = AwsS3AuthConfiguration.builder()
             .endpoint(dockerAwsS3Container.getEndpoint())
             .accessKeyId(DockerAwsS3Container.ACCESS_KEY_ID)
@@ -87,7 +85,7 @@ class AwsS3ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlobsDAOCont
             .builder(configuration)
             .defaultBucketName(bucketName)
             .blobIdFactory(new HashBlobId.Factory())
-            .putBlob(awsS3ObjectStorage.putBlob(bucketName, configuration));
+            .putBlob(awsS3ObjectStorage.putBlob(configuration));
 
         assertBlobsDAOCanStoreAndRetrieve(builder);
     }
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone2ObjectStorageBlobsDAOBuilderTest.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone2ObjectStorageBlobsDAOBuilderTest.java
index fd8f296..b1178a6 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone2ObjectStorageBlobsDAOBuilderTest.java
+++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone2ObjectStorageBlobsDAOBuilderTest.java
@@ -22,7 +22,6 @@ package org.apache.james.blob.objectstorage.swift;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import java.net.URI;
-import java.util.UUID;
 
 import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.api.HashBlobId;
@@ -48,7 +47,7 @@ class SwiftKeystone2ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlo
 
     @BeforeEach
     void setUp(DockerSwift dockerSwift) {
-        bucketName = BucketName.of(UUID.randomUUID().toString());
+        bucketName = BucketName.DEFAULT;
         endpoint = dockerSwift.keystoneV2Endpoint();
         testConfig = SwiftKeystone2ObjectStorage.configBuilder()
             .endpoint(endpoint)
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone3ObjectStorageBlobsDAOBuilderTest.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone3ObjectStorageBlobsDAOBuilderTest.java
index 16ac758..b7d24ae 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone3ObjectStorageBlobsDAOBuilderTest.java
+++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone3ObjectStorageBlobsDAOBuilderTest.java
@@ -23,7 +23,6 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import java.util.HashMap;
 import java.util.Map;
-import java.util.UUID;
 
 import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.api.HashBlobId;
@@ -78,7 +77,7 @@ class SwiftKeystone3ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlo
     @BeforeEach
     void setUp(DockerSwift dockerSwift) {
         this.dockerSwift = dockerSwift;
-        bucketName = BucketName.of(UUID.randomUUID().toString());
+        bucketName = BucketName.DEFAULT;
         testConfig = PROJECT_CONFIG
             .endpoint(dockerSwift.keystoneV3Endpoint())
             .build();
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftTempAuthObjectStorageBlobsDAOBuilderTest.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftTempAuthObjectStorageBlobsDAOBuilderTest.java
index 8ecf795..971d7f4 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftTempAuthObjectStorageBlobsDAOBuilderTest.java
+++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftTempAuthObjectStorageBlobsDAOBuilderTest.java
@@ -22,7 +22,6 @@ package org.apache.james.blob.objectstorage.swift;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import java.net.URI;
-import java.util.UUID;
 
 import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.api.HashBlobId;
@@ -48,7 +47,7 @@ class SwiftTempAuthObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlob
 
     @BeforeEach
     void setUp(DockerSwift dockerSwift) {
-        bucketName = BucketName.of(UUID.randomUUID().toString());
+        bucketName = BucketName.DEFAULT;
         endpoint = dockerSwift.swiftEndpoint();
         testConfig = SwiftTempAuthObjectStorage.configBuilder()
             .endpoint(endpoint)
diff --git a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageDependenciesModule.java b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageDependenciesModule.java
index 34ce338..94718d0 100644
--- a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageDependenciesModule.java
+++ b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageDependenciesModule.java
@@ -93,7 +93,7 @@ public class ObjectStorageDependenciesModule extends AbstractModule {
             case AWSS3:
                 return awsS3ObjectStorageProvider
                     .get()
-                    .putBlob(configuration.getNamespace(), (AwsS3AuthConfiguration) configuration.getSpecificAuthConfiguration());
+                    .putBlob((AwsS3AuthConfiguration) configuration.getSpecificAuthConfiguration());
         }
         throw new IllegalArgumentException("unknown provider " + configuration.getProvider());
 


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


[james-project] 10/12: JAMES-2806 Replace BucketName.DEFAULT by blobStore.getDefaultBucketName

Posted by bt...@apache.org.
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 54bac2e7a93496dec8f102bf90fafbc810466ac9
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Wed Jun 26 17:28:10 2019 +0700

    JAMES-2806 Replace BucketName.DEFAULT by blobStore.getDefaultBucketName
    
    in everywhere possible
---
 .../cassandra/mail/CassandraAttachmentMapper.java  |  7 +-
 .../cassandra/mail/CassandraMessageDAO.java        |  7 +-
 .../mail/migration/AttachmentV2Migration.java      |  3 +-
 .../mail/CassandraAttachmentFallbackTest.java      |  7 +-
 .../mail/migration/AttachmentV2MigrationTest.java  | 16 ++--
 .../main/java/org/apache/james/blob/api/Store.java |  4 +-
 .../apache/james/blob/api/BlobStoreContract.java   | 52 ++++++------
 .../blob/api/MetricableBlobStoreContract.java      | 24 +++---
 .../blob/cassandra/CassandraBlobsDAOTest.java      |  9 +--
 .../export/file/LocalFileBlobExportMechanism.java  |  3 +-
 .../file/LocalFileBlobExportMechanismTest.java     | 11 ++-
 .../ObjectStorageBlobsDAOContract.java             |  8 +-
 .../objectstorage/ObjectStorageBlobsDAOTest.java   | 38 ++++-----
 .../aws/AwsS3ObjectStorageBlobsDAOBuilderTest.java | 14 ++--
 ...tKeystone2ObjectStorageBlobsDAOBuilderTest.java | 13 +--
 ...tKeystone3ObjectStorageBlobsDAOBuilderTest.java | 13 +--
 ...ftTempAuthObjectStorageBlobsDAOBuilderTest.java | 13 +--
 .../james/blob/union/UnionBlobStoreTest.java       | 94 +++++++++++-----------
 .../james/blob/mail/MimeMessageStoreTest.java      |  5 +-
 .../objectstorage/aws/s3/DockerAwsS3TestRule.java  |  4 +-
 .../objectstorage/swift/DockerSwiftTestRule.java   |  4 +-
 .../swift/ObjectStorageBlobStoreModuleTest.java    |  2 +-
 .../james/webadmin/vault/routes/ExportService.java |  3 +-
 .../routes/DeletedMessagesVaultRoutesTest.java     |  3 +-
 .../linshare/LinshareBlobExportMechanism.java      |  3 +-
 .../linshare/LinshareBlobExportMechanismTest.java  |  9 +--
 26 files changed, 181 insertions(+), 188 deletions(-)

diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapper.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapper.java
index 38f840e..449a639 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapper.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapper.java
@@ -25,7 +25,6 @@ import java.util.List;
 import javax.inject.Inject;
 
 import org.apache.james.blob.api.BlobStore;
-import org.apache.james.blob.api.BucketName;
 import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentDAOV2.DAOAttachment;
 import org.apache.james.mailbox.exception.AttachmentNotFoundException;
 import org.apache.james.mailbox.exception.MailboxException;
@@ -80,7 +79,7 @@ public class CassandraAttachmentMapper implements AttachmentMapper {
     }
 
     private Mono<Attachment> retrievePayload(DAOAttachment daoAttachment) {
-        return blobStore.readBytes(BucketName.DEFAULT, daoAttachment.getBlobId())
+        return blobStore.readBytes(blobStore.getDefaultBucketName(), daoAttachment.getBlobId())
             .map(daoAttachment::toAttachment);
     }
 
@@ -111,7 +110,7 @@ public class CassandraAttachmentMapper implements AttachmentMapper {
     @Override
     public void storeAttachmentForOwner(Attachment attachment, Username owner) throws MailboxException {
         ownerDAO.addOwner(attachment.getAttachmentId(), owner)
-            .then(blobStore.save(BucketName.DEFAULT, attachment.getBytes()))
+            .then(blobStore.save(blobStore.getDefaultBucketName(), attachment.getBytes()))
             .map(blobId -> CassandraAttachmentDAOV2.from(attachment, blobId))
             .flatMap(attachmentDAOV2::storeAttachment)
             .block();
@@ -138,7 +137,7 @@ public class CassandraAttachmentMapper implements AttachmentMapper {
     }
 
     public Mono<Void> storeAttachmentAsync(Attachment attachment, MessageId ownerMessageId) {
-        return blobStore.save(BucketName.DEFAULT, attachment.getBytes())
+        return blobStore.save(blobStore.getDefaultBucketName(), attachment.getBytes())
             .map(blobId -> CassandraAttachmentDAOV2.from(attachment, blobId))
             .flatMap(daoAttachment -> storeAttachmentWithIndex(daoAttachment, ownerMessageId));
     }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
index 8457cbd..de53a32 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
@@ -57,7 +57,6 @@ import org.apache.james.backends.cassandra.init.configuration.CassandraConfigura
 import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
 import org.apache.james.blob.api.BlobId;
 import org.apache.james.blob.api.BlobStore;
-import org.apache.james.blob.api.BucketName;
 import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
 import org.apache.james.mailbox.cassandra.table.CassandraMessageV2Table;
 import org.apache.james.mailbox.cassandra.table.CassandraMessageV2Table.Attachments;
@@ -183,8 +182,8 @@ public class CassandraMessageDAO {
             byte[] headerContent = IOUtils.toByteArray(message.getHeaderContent());
             byte[] bodyContent = IOUtils.toByteArray(message.getBodyContent());
 
-            Mono<BlobId> bodyFuture = blobStore.save(BucketName.DEFAULT, bodyContent);
-            Mono<BlobId> headerFuture = blobStore.save(BucketName.DEFAULT, headerContent);
+            Mono<BlobId> bodyFuture = blobStore.save(blobStore.getDefaultBucketName(), bodyContent);
+            Mono<BlobId> headerFuture = blobStore.save(blobStore.getDefaultBucketName(), headerContent);
 
             return headerFuture.zipWith(bodyFuture);
         } catch (IOException e) {
@@ -359,7 +358,7 @@ public class CassandraMessageDAO {
     }
 
     private Mono<byte[]> getFieldContent(String field, Row row) {
-        return blobStore.readBytes(BucketName.DEFAULT, blobIdFactory.from(row.getString(field)));
+        return blobStore.readBytes(blobStore.getDefaultBucketName(), blobIdFactory.from(row.getString(field)));
     }
 
     public static MessageResult notFound(ComposedMessageIdWithMetaData id) {
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2Migration.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2Migration.java
index 308d090..1bcb329 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2Migration.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2Migration.java
@@ -23,7 +23,6 @@ import javax.inject.Inject;
 
 import org.apache.james.backends.cassandra.migration.Migration;
 import org.apache.james.blob.api.BlobStore;
-import org.apache.james.blob.api.BucketName;
 import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentDAO;
 import org.apache.james.mailbox.cassandra.mail.CassandraAttachmentDAOV2;
 import org.apache.james.mailbox.model.Attachment;
@@ -63,7 +62,7 @@ public class AttachmentV2Migration implements Migration {
     }
 
     private Mono<Result> migrateAttachment(Attachment attachment) {
-        return blobStore.save(BucketName.DEFAULT, attachment.getBytes())
+        return blobStore.save(blobStore.getDefaultBucketName(), attachment.getBytes())
             .map(blobId -> CassandraAttachmentDAOV2.from(attachment, blobId))
             .flatMap(attachmentDAOV2::storeAttachment)
             .then(attachmentDAOV1.deleteAttachment(attachment.getAttachmentId()))
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentFallbackTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentFallbackTest.java
index cd6b58b..1be26d1 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentFallbackTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentFallbackTest.java
@@ -31,7 +31,6 @@ import org.apache.james.backends.cassandra.CassandraRestartExtension;
 import org.apache.james.backends.cassandra.components.CassandraModule;
 import org.apache.james.backends.cassandra.init.configuration.CassandraConfiguration;
 import org.apache.james.blob.api.BlobId;
-import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.api.HashBlobId;
 import org.apache.james.blob.cassandra.CassandraBlobModule;
 import org.apache.james.blob.cassandra.CassandraBlobsDAO;
@@ -102,7 +101,7 @@ class CassandraAttachmentFallbackTest {
             .bytes("{\"property\":`\"different\"}".getBytes(StandardCharsets.UTF_8))
             .build();
 
-        BlobId blobId = blobsDAO.save(BucketName.DEFAULT, attachment.getBytes()).block();
+        BlobId blobId = blobsDAO.save(blobsDAO.getDefaultBucketName(), attachment.getBytes()).block();
         attachmentDAOV2.storeAttachment(CassandraAttachmentDAOV2.from(attachment, blobId)).block();
         attachmentDAO.storeAttachment(otherAttachment).block();
 
@@ -137,7 +136,7 @@ class CassandraAttachmentFallbackTest {
             .bytes("{\"property\":`\"different\"}".getBytes(StandardCharsets.UTF_8))
             .build();
 
-        BlobId blobId = blobsDAO.save(BucketName.DEFAULT, attachment.getBytes()).block();
+        BlobId blobId = blobsDAO.save(blobsDAO.getDefaultBucketName(), attachment.getBytes()).block();
         attachmentDAOV2.storeAttachment(CassandraAttachmentDAOV2.from(attachment, blobId)).block();
         attachmentDAO.storeAttachment(otherAttachment).block();
 
@@ -172,7 +171,7 @@ class CassandraAttachmentFallbackTest {
             .bytes("{\"property\":`\"different\"}".getBytes(StandardCharsets.UTF_8))
             .build();
 
-        BlobId blobId = blobsDAO.save(BucketName.DEFAULT, attachment.getBytes()).block();
+        BlobId blobId = blobsDAO.save(blobsDAO.getDefaultBucketName(), attachment.getBytes()).block();
         attachmentDAOV2.storeAttachment(CassandraAttachmentDAOV2.from(attachment, blobId)).block();
         attachmentDAO.storeAttachment(otherAttachment).block();
 
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2MigrationTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2MigrationTest.java
index d3ec71f..29aeede 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2MigrationTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/migration/AttachmentV2MigrationTest.java
@@ -114,9 +114,9 @@ class AttachmentV2MigrationTest {
             .contains(CassandraAttachmentDAOV2.from(attachment1, BLOB_ID_FACTORY.forPayload(attachment1.getBytes())));
         assertThat(attachmentDAOV2.getAttachment(ATTACHMENT_ID_2).blockOptional())
             .contains(CassandraAttachmentDAOV2.from(attachment2, BLOB_ID_FACTORY.forPayload(attachment2.getBytes())));
-        assertThat(blobsDAO.readBytes(BucketName.DEFAULT, BLOB_ID_FACTORY.forPayload(attachment1.getBytes())).block())
+        assertThat(blobsDAO.readBytes(blobsDAO.getDefaultBucketName(), BLOB_ID_FACTORY.forPayload(attachment1.getBytes())).block())
             .isEqualTo(attachment1.getBytes());
-        assertThat(blobsDAO.readBytes(BucketName.DEFAULT, BLOB_ID_FACTORY.forPayload(attachment2.getBytes())).block())
+        assertThat(blobsDAO.readBytes(blobsDAO.getDefaultBucketName(), BLOB_ID_FACTORY.forPayload(attachment2.getBytes())).block())
             .isEqualTo(attachment2.getBytes());
     }
 
@@ -170,9 +170,9 @@ class AttachmentV2MigrationTest {
         when(attachmentDAO.retrieveAll()).thenReturn(Flux.just(
             attachment1,
             attachment2));
-        when(blobsDAO.save(BucketName.DEFAULT, attachment1.getBytes()))
+        when(blobsDAO.save(blobsDAO.getDefaultBucketName(), attachment1.getBytes()))
             .thenReturn(Mono.just(BLOB_ID_FACTORY.forPayload(attachment1.getBytes())));
-        when(blobsDAO.save(BucketName.DEFAULT, attachment2.getBytes()))
+        when(blobsDAO.save(blobsDAO.getDefaultBucketName(), attachment2.getBytes()))
             .thenReturn(Mono.just(BLOB_ID_FACTORY.forPayload(attachment2.getBytes())));
         when(attachmentDAOV2.storeAttachment(any())).thenThrow(new RuntimeException());
 
@@ -189,9 +189,9 @@ class AttachmentV2MigrationTest {
         when(attachmentDAO.retrieveAll()).thenReturn(Flux.just(
             attachment1,
             attachment2));
-        when(blobsDAO.save(BucketName.DEFAULT, attachment1.getBytes()))
+        when(blobsDAO.save(blobsDAO.getDefaultBucketName(), attachment1.getBytes()))
             .thenReturn(Mono.just(BLOB_ID_FACTORY.forPayload(attachment1.getBytes())));
-        when(blobsDAO.save(BucketName.DEFAULT, attachment2.getBytes()))
+        when(blobsDAO.save(blobsDAO.getDefaultBucketName(), attachment2.getBytes()))
             .thenReturn(Mono.just(BLOB_ID_FACTORY.forPayload(attachment2.getBytes())));
         when(attachmentDAOV2.storeAttachment(any())).thenReturn(Mono.empty());
         when(attachmentDAO.deleteAttachment(any())).thenThrow(new RuntimeException());
@@ -209,9 +209,9 @@ class AttachmentV2MigrationTest {
         when(attachmentDAO.retrieveAll()).thenReturn(Flux.just(
             attachment1,
             attachment2));
-        when(blobsDAO.save(BucketName.DEFAULT, attachment1.getBytes()))
+        when(blobsDAO.save(blobsDAO.getDefaultBucketName(), attachment1.getBytes()))
             .thenReturn(Mono.just(BLOB_ID_FACTORY.forPayload(attachment1.getBytes())));
-        when(blobsDAO.save(BucketName.DEFAULT, attachment2.getBytes()))
+        when(blobsDAO.save(blobsDAO.getDefaultBucketName(), attachment2.getBytes()))
             .thenThrow(new RuntimeException());
         when(attachmentDAOV2.storeAttachment(any())).thenReturn(Mono.empty());
         when(attachmentDAO.deleteAttachment(any())).thenReturn(Mono.empty());
diff --git a/server/blob/blob-api/src/main/java/org/apache/james/blob/api/Store.java b/server/blob/blob-api/src/main/java/org/apache/james/blob/api/Store.java
index ce640d5..5feef59 100644
--- a/server/blob/blob-api/src/main/java/org/apache/james/blob/api/Store.java
+++ b/server/blob/blob-api/src/main/java/org/apache/james/blob/api/Store.java
@@ -112,7 +112,7 @@ public interface Store<T, I> {
 
         private Mono<Tuple2<BlobType, BlobId>> saveEntry(Pair<BlobType, ValueToSave> entry) {
             return Mono.just(entry.getLeft())
-                .zipWith(entry.getRight().saveIn(BucketName.DEFAULT, blobStore));
+                .zipWith(entry.getRight().saveIn(blobStore.getDefaultBucketName(), blobStore));
         }
 
         @Override
@@ -120,7 +120,7 @@ public interface Store<T, I> {
             return Flux.fromIterable(blobIds.asMap().entrySet())
                 .publishOn(Schedulers.elastic())
                 .flatMapSequential(
-                    entry -> blobStore.readBytes(BucketName.DEFAULT, entry.getValue())
+                    entry -> blobStore.readBytes(blobStore.getDefaultBucketName(), entry.getValue())
                         .zipWith(Mono.just(entry.getKey())))
                 .map(entry -> Pair.of(entry.getT2(), entry.getT1()))
                 .collectList()
diff --git a/server/blob/blob-api/src/test/java/org/apache/james/blob/api/BlobStoreContract.java b/server/blob/blob-api/src/test/java/org/apache/james/blob/api/BlobStoreContract.java
index 34ef95e..07d4588 100644
--- a/server/blob/blob-api/src/test/java/org/apache/james/blob/api/BlobStoreContract.java
+++ b/server/blob/blob-api/src/test/java/org/apache/james/blob/api/BlobStoreContract.java
@@ -44,59 +44,59 @@ public interface BlobStoreContract {
 
     @Test
     default void saveShouldThrowWhenNullData() {
-        assertThatThrownBy(() -> testee().save(BucketName.DEFAULT, (byte[]) null).block())
+        assertThatThrownBy(() -> testee().save(testee().getDefaultBucketName(), (byte[]) null).block())
             .isInstanceOf(NullPointerException.class);
     }
 
     @Test
     default void saveShouldThrowWhenNullString() {
-        assertThatThrownBy(() -> testee().save(BucketName.DEFAULT, (String) null).block())
+        assertThatThrownBy(() -> testee().save(testee().getDefaultBucketName(), (String) null).block())
             .isInstanceOf(NullPointerException.class);
     }
 
     @Test
     default void saveShouldThrowWhenNullInputStream() {
-        assertThatThrownBy(() -> testee().save(BucketName.DEFAULT, (InputStream) null).block())
+        assertThatThrownBy(() -> testee().save(testee().getDefaultBucketName(), (InputStream) null).block())
             .isInstanceOf(NullPointerException.class);
     }
 
     @Test
     default void saveShouldSaveEmptyData() {
-        BlobId blobId = testee().save(BucketName.DEFAULT, EMPTY_BYTEARRAY).block();
+        BlobId blobId = testee().save(testee().getDefaultBucketName(), EMPTY_BYTEARRAY).block();
 
-        byte[] bytes = testee().readBytes(BucketName.DEFAULT, blobId).block();
+        byte[] bytes = testee().readBytes(testee().getDefaultBucketName(), blobId).block();
 
         assertThat(new String(bytes, StandardCharsets.UTF_8)).isEmpty();
     }
 
     @Test
     default void saveShouldSaveEmptyString() {
-        BlobId blobId = testee().save(BucketName.DEFAULT, new String()).block();
+        BlobId blobId = testee().save(testee().getDefaultBucketName(), new String()).block();
 
-        byte[] bytes = testee().readBytes(BucketName.DEFAULT, blobId).block();
+        byte[] bytes = testee().readBytes(testee().getDefaultBucketName(), blobId).block();
 
         assertThat(new String(bytes, StandardCharsets.UTF_8)).isEmpty();
     }
 
     @Test
     default void saveShouldSaveEmptyInputStream() {
-        BlobId blobId = testee().save(BucketName.DEFAULT, new ByteArrayInputStream(EMPTY_BYTEARRAY)).block();
+        BlobId blobId = testee().save(testee().getDefaultBucketName(), new ByteArrayInputStream(EMPTY_BYTEARRAY)).block();
 
-        byte[] bytes = testee().readBytes(BucketName.DEFAULT, blobId).block();
+        byte[] bytes = testee().readBytes(testee().getDefaultBucketName(), blobId).block();
 
         assertThat(new String(bytes, StandardCharsets.UTF_8)).isEmpty();
     }
 
     @Test
     default void saveShouldReturnBlobId() {
-        BlobId blobId = testee().save(BucketName.DEFAULT, SHORT_BYTEARRAY).block();
+        BlobId blobId = testee().save(testee().getDefaultBucketName(), SHORT_BYTEARRAY).block();
 
         assertThat(blobId).isEqualTo(blobIdFactory().from("31f7a65e315586ac198bd798b6629ce4903d0899476d5741a9f32e2e521b6a66"));
     }
 
     @Test
     default void saveShouldReturnBlobIdOfString() {
-        BlobId blobId = testee().save(BucketName.DEFAULT, SHORT_STRING).block();
+        BlobId blobId = testee().save(testee().getDefaultBucketName(), SHORT_STRING).block();
 
         assertThat(blobId).isEqualTo(blobIdFactory().from("31f7a65e315586ac198bd798b6629ce4903d0899476d5741a9f32e2e521b6a66"));
     }
@@ -104,64 +104,64 @@ public interface BlobStoreContract {
     @Test
     default void saveShouldReturnBlobIdOfInputStream() {
         BlobId blobId =
-            testee().save(BucketName.DEFAULT, new ByteArrayInputStream(SHORT_BYTEARRAY)).block();
+            testee().save(testee().getDefaultBucketName(), new ByteArrayInputStream(SHORT_BYTEARRAY)).block();
 
         assertThat(blobId).isEqualTo(blobIdFactory().from("31f7a65e315586ac198bd798b6629ce4903d0899476d5741a9f32e2e521b6a66"));
     }
 
     @Test
     default void readBytesShouldThrowWhenNoExisting() {
-        assertThatThrownBy(() -> testee().readBytes(BucketName.DEFAULT, blobIdFactory().from("unknown")).block())
+        assertThatThrownBy(() -> testee().readBytes(testee().getDefaultBucketName(), blobIdFactory().from("unknown")).block())
             .isExactlyInstanceOf(ObjectStoreException.class);
     }
 
     @Test
     default void readBytesShouldReturnSavedData() {
-        BlobId blobId = testee().save(BucketName.DEFAULT, SHORT_BYTEARRAY).block();
+        BlobId blobId = testee().save(testee().getDefaultBucketName(), SHORT_BYTEARRAY).block();
 
-        byte[] bytes = testee().readBytes(BucketName.DEFAULT, blobId).block();
+        byte[] bytes = testee().readBytes(testee().getDefaultBucketName(), blobId).block();
 
         assertThat(bytes).isEqualTo(SHORT_BYTEARRAY);
     }
 
     @Test
     default void readBytesShouldReturnLongSavedData() {
-        BlobId blobId = testee().save(BucketName.DEFAULT, ELEVEN_KILOBYTES).block();
+        BlobId blobId = testee().save(testee().getDefaultBucketName(), ELEVEN_KILOBYTES).block();
 
-        byte[] bytes = testee().readBytes(BucketName.DEFAULT, blobId).block();
+        byte[] bytes = testee().readBytes(testee().getDefaultBucketName(), blobId).block();
 
         assertThat(bytes).isEqualTo(ELEVEN_KILOBYTES);
     }
 
     @Test
     default void readBytesShouldReturnBigSavedData() {
-        BlobId blobId = testee().save(BucketName.DEFAULT, TWELVE_MEGABYTES).block();
+        BlobId blobId = testee().save(testee().getDefaultBucketName(), TWELVE_MEGABYTES).block();
 
-        byte[] bytes = testee().readBytes(BucketName.DEFAULT, blobId).block();
+        byte[] bytes = testee().readBytes(testee().getDefaultBucketName(), blobId).block();
 
         assertThat(bytes).isEqualTo(TWELVE_MEGABYTES);
     }
 
     @Test
     default void readShouldThrowWhenNoExistingStream() {
-        assertThatThrownBy(() -> testee().read(BucketName.DEFAULT, blobIdFactory().from("unknown")))
+        assertThatThrownBy(() -> testee().read(testee().getDefaultBucketName(), blobIdFactory().from("unknown")))
             .isInstanceOf(ObjectStoreException.class);
     }
 
     @Test
     default void readShouldReturnSavedData() {
-        BlobId blobId = testee().save(BucketName.DEFAULT, SHORT_BYTEARRAY).block();
+        BlobId blobId = testee().save(testee().getDefaultBucketName(), SHORT_BYTEARRAY).block();
 
-        InputStream read = testee().read(BucketName.DEFAULT, blobId);
+        InputStream read = testee().read(testee().getDefaultBucketName(), blobId);
 
         assertThat(read).hasSameContentAs(new ByteArrayInputStream(SHORT_BYTEARRAY));
     }
 
     @Test
     default void readShouldReturnLongSavedData() {
-        BlobId blobId = testee().save(BucketName.DEFAULT, ELEVEN_KILOBYTES).block();
+        BlobId blobId = testee().save(testee().getDefaultBucketName(), ELEVEN_KILOBYTES).block();
 
-        InputStream read = testee().read(BucketName.DEFAULT, blobId);
+        InputStream read = testee().read(testee().getDefaultBucketName(), blobId);
 
         assertThat(read).hasSameContentAs(new ByteArrayInputStream(ELEVEN_KILOBYTES));
     }
@@ -169,9 +169,9 @@ public interface BlobStoreContract {
     @Test
     default void readShouldReturnBigSavedData() {
         // 12 MB of text
-        BlobId blobId = testee().save(BucketName.DEFAULT, TWELVE_MEGABYTES).block();
+        BlobId blobId = testee().save(testee().getDefaultBucketName(), TWELVE_MEGABYTES).block();
 
-        InputStream read = testee().read(BucketName.DEFAULT, blobId);
+        InputStream read = testee().read(testee().getDefaultBucketName(), blobId);
 
         assertThat(read).hasSameContentAs(new ByteArrayInputStream(TWELVE_MEGABYTES));
     }
diff --git a/server/blob/blob-api/src/test/java/org/apache/james/blob/api/MetricableBlobStoreContract.java b/server/blob/blob-api/src/test/java/org/apache/james/blob/api/MetricableBlobStoreContract.java
index 983c516..38f5188 100644
--- a/server/blob/blob-api/src/test/java/org/apache/james/blob/api/MetricableBlobStoreContract.java
+++ b/server/blob/blob-api/src/test/java/org/apache/james/blob/api/MetricableBlobStoreContract.java
@@ -58,8 +58,8 @@ public interface MetricableBlobStoreContract extends BlobStoreContract {
 
     @Test
     default void saveBytesShouldPublishSaveBytesTimerMetrics() {
-        testee().save(BucketName.DEFAULT, BYTES_CONTENT).block();
-        testee().save(BucketName.DEFAULT, BYTES_CONTENT).block();
+        testee().save(testee().getDefaultBucketName(), BYTES_CONTENT).block();
+        testee().save(testee().getDefaultBucketName(), BYTES_CONTENT).block();
 
         assertThat(metricsTestExtension.getMetricFactory().executionTimesFor(SAVE_BYTES_TIMER_NAME))
             .hasSize(2);
@@ -67,8 +67,8 @@ public interface MetricableBlobStoreContract extends BlobStoreContract {
 
     @Test
     default void saveStringShouldPublishSaveBytesTimerMetrics() {
-        testee().save(BucketName.DEFAULT, STRING_CONTENT).block();
-        testee().save(BucketName.DEFAULT, STRING_CONTENT).block();
+        testee().save(testee().getDefaultBucketName(), STRING_CONTENT).block();
+        testee().save(testee().getDefaultBucketName(), STRING_CONTENT).block();
 
         assertThat(metricsTestExtension.getMetricFactory().executionTimesFor(SAVE_BYTES_TIMER_NAME))
             .hasSize(2);
@@ -76,8 +76,8 @@ public interface MetricableBlobStoreContract extends BlobStoreContract {
 
     @Test
     default void saveInputStreamShouldPublishSaveInputStreamTimerMetrics() {
-        testee().save(BucketName.DEFAULT, new ByteArrayInputStream(BYTES_CONTENT)).block();
-        testee().save(BucketName.DEFAULT, new ByteArrayInputStream(BYTES_CONTENT)).block();
+        testee().save(testee().getDefaultBucketName(), new ByteArrayInputStream(BYTES_CONTENT)).block();
+        testee().save(testee().getDefaultBucketName(), new ByteArrayInputStream(BYTES_CONTENT)).block();
 
         assertThat(metricsTestExtension.getMetricFactory().executionTimesFor(SAVE_INPUT_STREAM_TIMER_NAME))
             .hasSize(2);
@@ -85,9 +85,9 @@ public interface MetricableBlobStoreContract extends BlobStoreContract {
 
     @Test
     default void readBytesShouldPublishReadBytesTimerMetrics() {
-        BlobId blobId = testee().save(BucketName.DEFAULT, BYTES_CONTENT).block();
-        testee().readBytes(BucketName.DEFAULT, blobId).block();
-        testee().readBytes(BucketName.DEFAULT, blobId).block();
+        BlobId blobId = testee().save(testee().getDefaultBucketName(), BYTES_CONTENT).block();
+        testee().readBytes(testee().getDefaultBucketName(), blobId).block();
+        testee().readBytes(testee().getDefaultBucketName(), blobId).block();
 
         assertThat(metricsTestExtension.getMetricFactory().executionTimesFor(READ_BYTES_TIMER_NAME))
             .hasSize(2);
@@ -95,9 +95,9 @@ public interface MetricableBlobStoreContract extends BlobStoreContract {
 
     @Test
     default void readShouldPublishReadTimerMetrics() {
-        BlobId blobId = testee().save(BucketName.DEFAULT, BYTES_CONTENT).block();
-        testee().read(BucketName.DEFAULT, blobId);
-        testee().read(BucketName.DEFAULT, blobId);
+        BlobId blobId = testee().save(testee().getDefaultBucketName(), BYTES_CONTENT).block();
+        testee().read(testee().getDefaultBucketName(), blobId);
+        testee().read(testee().getDefaultBucketName(), blobId);
 
         assertThat(metricsTestExtension.getMetricFactory().executionTimesFor(READ_TIMER_NAME))
             .hasSize(2);
diff --git a/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobsDAOTest.java b/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobsDAOTest.java
index 23e3375..5bf792f 100644
--- a/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobsDAOTest.java
+++ b/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobsDAOTest.java
@@ -29,7 +29,6 @@ import org.apache.james.backends.cassandra.CassandraClusterExtension;
 import org.apache.james.backends.cassandra.init.configuration.CassandraConfiguration;
 import org.apache.james.blob.api.BlobId;
 import org.apache.james.blob.api.BlobStore;
-import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.api.HashBlobId;
 import org.apache.james.blob.api.MetricableBlobStore;
 import org.apache.james.blob.api.MetricableBlobStoreContract;
@@ -80,17 +79,17 @@ public class CassandraBlobsDAOTest implements MetricableBlobStoreContract {
     @Test
     void readBytesShouldReturnSplitSavedDataByChunk() {
         String longString = Strings.repeat("0123456789\n", MULTIPLE_CHUNK_SIZE);
-        BlobId blobId = testee.save(BucketName.DEFAULT, longString).block();
+        BlobId blobId = testee.save(testee.getDefaultBucketName(), longString).block();
 
-        byte[] bytes = testee.readBytes(BucketName.DEFAULT, blobId).block();
+        byte[] bytes = testee.readBytes(testee.getDefaultBucketName(), blobId).block();
 
         assertThat(new String(bytes, StandardCharsets.UTF_8)).isEqualTo(longString);
     }
 
     @Test
     void blobStoreShouldSupport100MBBlob() {
-        BlobId blobId = testee.save(BucketName.DEFAULT, new ZeroedInputStream(100_000_000)).block();
-        InputStream bytes = testee.read(BucketName.DEFAULT, blobId);
+        BlobId blobId = testee.save(testee.getDefaultBucketName(), new ZeroedInputStream(100_000_000)).block();
+        InputStream bytes = testee.read(testee.getDefaultBucketName(), blobId);
         assertThat(bytes).hasSameContentAs(new ZeroedInputStream(100_000_000));
     }
 
diff --git a/server/blob/blob-export-file/src/main/java/org/apache/james/blob/export/file/LocalFileBlobExportMechanism.java b/server/blob/blob-export-file/src/main/java/org/apache/james/blob/export/file/LocalFileBlobExportMechanism.java
index d6b047e..5ec6e2c 100644
--- a/server/blob/blob-export-file/src/main/java/org/apache/james/blob/export/file/LocalFileBlobExportMechanism.java
+++ b/server/blob/blob-export-file/src/main/java/org/apache/james/blob/export/file/LocalFileBlobExportMechanism.java
@@ -30,7 +30,6 @@ import javax.inject.Inject;
 import org.apache.commons.io.FileUtils;
 import org.apache.james.blob.api.BlobId;
 import org.apache.james.blob.api.BlobStore;
-import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.export.api.BlobExportMechanism;
 import org.apache.james.blob.export.api.ExportedFileNamesGenerator;
 import org.apache.james.blob.export.api.FileExtension;
@@ -121,7 +120,7 @@ public class LocalFileBlobExportMechanism implements BlobExportMechanism {
             String fileName = ExportedFileNamesGenerator.generateFileName(fileCustomPrefix, blobId, fileExtension);
             String fileURL = configuration.exportDirectory + "/" + fileName;
             File file = fileSystem.getFile(fileURL);
-            FileUtils.copyToFile(blobStore.read(BucketName.DEFAULT, blobId), file);
+            FileUtils.copyToFile(blobStore.read(blobStore.getDefaultBucketName(), blobId), file);
 
             return file.getAbsolutePath();
         } catch (IOException e) {
diff --git a/server/blob/blob-export-file/src/test/java/org/apache/james/blob/export/file/LocalFileBlobExportMechanismTest.java b/server/blob/blob-export-file/src/test/java/org/apache/james/blob/export/file/LocalFileBlobExportMechanismTest.java
index 6b4f196..c9adbc9 100644
--- a/server/blob/blob-export-file/src/test/java/org/apache/james/blob/export/file/LocalFileBlobExportMechanismTest.java
+++ b/server/blob/blob-export-file/src/test/java/org/apache/james/blob/export/file/LocalFileBlobExportMechanismTest.java
@@ -37,7 +37,6 @@ import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.james.blob.api.BlobId;
 import org.apache.james.blob.api.BlobStore;
-import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.api.HashBlobId;
 import org.apache.james.blob.api.ObjectStoreException;
 import org.apache.james.blob.export.api.FileExtension;
@@ -80,7 +79,7 @@ class LocalFileBlobExportMechanismTest {
 
     @Test
     void exportingBlobShouldSendAMail() {
-        BlobId blobId = blobStore.save(BucketName.DEFAULT, BLOB_CONTENT).block();
+        BlobId blobId = blobStore.save(blobStore.getDefaultBucketName(), BLOB_CONTENT).block();
 
         String explanation = "The content of a deleted message vault had been shared with you.";
         testee.blobId(blobId)
@@ -113,7 +112,7 @@ class LocalFileBlobExportMechanismTest {
 
     @Test
     void exportingBlobShouldCreateAFileWithTheCorrespondingContent(FileSystem fileSystem) {
-        BlobId blobId = blobStore.save(BucketName.DEFAULT, BLOB_CONTENT).block();
+        BlobId blobId = blobStore.save(blobStore.getDefaultBucketName(), BLOB_CONTENT).block();
 
         testee.blobId(blobId)
             .with(MailAddressFixture.RECIPIENT1)
@@ -151,7 +150,7 @@ class LocalFileBlobExportMechanismTest {
 
     @Test
     void exportingBlobShouldCreateAFileWithoutExtensionWhenNotDeclaringExtension() {
-        BlobId blobId = blobStore.save(BucketName.DEFAULT, BLOB_CONTENT).block();
+        BlobId blobId = blobStore.save(blobStore.getDefaultBucketName(), BLOB_CONTENT).block();
 
         testee.blobId(blobId)
             .with(MailAddressFixture.RECIPIENT1)
@@ -175,7 +174,7 @@ class LocalFileBlobExportMechanismTest {
 
     @Test
     void exportingBlobShouldCreateAFileWithExtensionWhenDeclaringExtension() {
-        BlobId blobId = blobStore.save(BucketName.DEFAULT, BLOB_CONTENT).block();
+        BlobId blobId = blobStore.save(blobStore.getDefaultBucketName(), BLOB_CONTENT).block();
 
         testee.blobId(blobId)
             .with(MailAddressFixture.RECIPIENT1)
@@ -200,7 +199,7 @@ class LocalFileBlobExportMechanismTest {
 
     @Test
     void exportingBlobShouldCreateAFileWithPrefixWhenDeclaringPrefix() {
-        BlobId blobId = blobStore.save(BucketName.DEFAULT, BLOB_CONTENT).block();
+        BlobId blobId = blobStore.save(blobStore.getDefaultBucketName(), BLOB_CONTENT).block();
         String filePrefix = "deleted-message-of-bob@james.org";
 
         testee.blobId(blobId)
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOContract.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOContract.java
index ba597e2..f25393a 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOContract.java
+++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOContract.java
@@ -33,15 +33,15 @@ public interface ObjectStorageBlobsDAOContract {
 
     String CONTENT = "content";
 
-    BucketName bucketName();
+    BucketName defaultBucketName();
 
     default void assertBlobsDAOCanStoreAndRetrieve(ObjectStorageBlobsDAOBuilder.ReadyToBuild builder) {
         ObjectStorageBlobsDAO dao = builder.build();
-        dao.createBucket(bucketName()).block();
+        dao.createBucket(dao.getDefaultBucketName()).block();
 
-        BlobId blobId = dao.save(BucketName.DEFAULT, CONTENT).block();
+        BlobId blobId = dao.save(dao.getDefaultBucketName(), CONTENT).block();
 
-        InputStream inputStream = dao.read(BucketName.DEFAULT, blobId);
+        InputStream inputStream = dao.read(dao.getDefaultBucketName(), blobId);
         assertThat(inputStream).hasSameContentAs(IOUtils.toInputStream(CONTENT, StandardCharsets.UTF_8));
     }
 }
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOTest.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOTest.java
index ad794fe..14772bb 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOTest.java
+++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOTest.java
@@ -68,7 +68,7 @@ public class ObjectStorageBlobsDAOTest implements MetricableBlobStoreContract {
         .password(PASSWORD.value().toCharArray())
         .build();
 
-    private BucketName bucketName;
+    private BucketName defaultBucketName;
     private org.jclouds.blobstore.BlobStore blobStore;
     private SwiftTempAuthObjectStorage.Configuration testConfig;
     private ObjectStorageBlobsDAO objectStorageBlobsDAO;
@@ -76,7 +76,7 @@ public class ObjectStorageBlobsDAOTest implements MetricableBlobStoreContract {
 
     @BeforeEach
     void setUp(DockerSwift dockerSwift) {
-        bucketName = BucketName.DEFAULT;
+        defaultBucketName = BucketName.of(UUID.randomUUID().toString());
         testConfig = SwiftTempAuthObjectStorage.configBuilder()
             .endpoint(dockerSwift.swiftEndpoint())
             .identity(SWIFT_IDENTITY)
@@ -87,17 +87,17 @@ public class ObjectStorageBlobsDAOTest implements MetricableBlobStoreContract {
         BlobId.Factory blobIdFactory = blobIdFactory();
         ObjectStorageBlobsDAOBuilder.ReadyToBuild daoBuilder = ObjectStorageBlobsDAO
             .builder(testConfig)
-            .defaultBucketName(bucketName)
+            .defaultBucketName(defaultBucketName)
             .blobIdFactory(blobIdFactory);
         blobStore = daoBuilder.getSupplier().get();
         objectStorageBlobsDAO = daoBuilder.build();
-        objectStorageBlobsDAO.createBucket(bucketName).block();
+        objectStorageBlobsDAO.createBucket(defaultBucketName).block();
         testee = new MetricableBlobStore(metricsTestExtension.getMetricFactory(), objectStorageBlobsDAO);
     }
 
     @AfterEach
     void tearDown() {
-        blobStore.deleteContainer(bucketName.asString());
+        blobStore.deleteContainer(defaultBucketName.asString());
         blobStore.getContext().close();
     }
 
@@ -137,14 +137,14 @@ public class ObjectStorageBlobsDAOTest implements MetricableBlobStoreContract {
     void supportsEncryptionWithCustomPayloadCodec() throws IOException {
         ObjectStorageBlobsDAO encryptedDao = ObjectStorageBlobsDAO
             .builder(testConfig)
-            .defaultBucketName(bucketName)
+            .defaultBucketName(defaultBucketName)
             .blobIdFactory(blobIdFactory())
             .payloadCodec(new AESPayloadCodec(CRYPTO_CONFIG))
             .build();
         String content = "James is the best!";
-        BlobId blobId = encryptedDao.save(BucketName.DEFAULT, content).block();
+        BlobId blobId = encryptedDao.save(encryptedDao.getDefaultBucketName(), content).block();
 
-        InputStream read = encryptedDao.read(BucketName.DEFAULT, blobId);
+        InputStream read = encryptedDao.read(encryptedDao.getDefaultBucketName(), blobId);
         String expectedContent = IOUtils.toString(read, Charsets.UTF_8);
         assertThat(content).isEqualTo(expectedContent);
     }
@@ -153,27 +153,27 @@ public class ObjectStorageBlobsDAOTest implements MetricableBlobStoreContract {
     void encryptionWithCustomPayloadCodeCannotBeReadFromUnencryptedDAO() throws Exception {
         ObjectStorageBlobsDAO encryptedDao = ObjectStorageBlobsDAO
             .builder(testConfig)
-            .defaultBucketName(bucketName)
+            .defaultBucketName(defaultBucketName)
             .blobIdFactory(blobIdFactory())
             .payloadCodec(new AESPayloadCodec(CRYPTO_CONFIG))
             .build();
         String content = "James is the best!";
-        BlobId blobId = encryptedDao.save(BucketName.DEFAULT, content).block();
+        BlobId blobId = encryptedDao.save(encryptedDao.getDefaultBucketName(), content).block();
 
-        InputStream encryptedIs = testee.read(BucketName.DEFAULT, blobId);
+        InputStream encryptedIs = testee.read(encryptedDao.getDefaultBucketName(), blobId);
         assertThat(encryptedIs).isNotNull();
         String encryptedString = IOUtils.toString(encryptedIs, Charsets.UTF_8);
         assertThat(encryptedString).isNotEqualTo(content);
 
-        InputStream clearTextIs = encryptedDao.read(BucketName.DEFAULT, blobId);
+        InputStream clearTextIs = encryptedDao.read(encryptedDao.getDefaultBucketName(), blobId);
         String expectedContent = IOUtils.toString(clearTextIs, Charsets.UTF_8);
         assertThat(content).isEqualTo(expectedContent);
     }
 
     @Test
     void deleteContainerShouldDeleteSwiftContainer() {
-        objectStorageBlobsDAO.deleteContainer(bucketName);
-        assertThat(blobStore.containerExists(bucketName.asString()))
+        objectStorageBlobsDAO.deleteContainer(defaultBucketName);
+        assertThat(blobStore.containerExists(defaultBucketName.asString()))
             .isFalse();
     }
 
@@ -181,7 +181,7 @@ public class ObjectStorageBlobsDAOTest implements MetricableBlobStoreContract {
     void saveBytesShouldNotCompleteWhenDoesNotAwait() {
         // String need to be big enough to get async thread busy hence could not return result instantly
         Mono<BlobId> blobIdFuture = testee
-            .save(BucketName.DEFAULT, BIG_STRING.getBytes(StandardCharsets.UTF_8))
+            .save(testee.getDefaultBucketName(), BIG_STRING.getBytes(StandardCharsets.UTF_8))
             .subscribeOn(Schedulers.elastic());
         assertThat(blobIdFuture.toFuture()).isNotCompleted();
     }
@@ -189,7 +189,7 @@ public class ObjectStorageBlobsDAOTest implements MetricableBlobStoreContract {
     @Test
     void saveStringShouldNotCompleteWhenDoesNotAwait() {
         Mono<BlobId> blobIdFuture = testee
-            .save(BucketName.DEFAULT, BIG_STRING)
+            .save(testee.getDefaultBucketName(), BIG_STRING)
             .subscribeOn(Schedulers.elastic());
         assertThat(blobIdFuture.toFuture()).isNotCompleted();
     }
@@ -197,15 +197,15 @@ public class ObjectStorageBlobsDAOTest implements MetricableBlobStoreContract {
     @Test
     void saveInputStreamShouldNotCompleteWhenDoesNotAwait() {
         Mono<BlobId> blobIdFuture = testee
-            .save(BucketName.DEFAULT, new ByteArrayInputStream(BIG_STRING.getBytes(StandardCharsets.UTF_8)))
+            .save(testee.getDefaultBucketName(), new ByteArrayInputStream(BIG_STRING.getBytes(StandardCharsets.UTF_8)))
             .subscribeOn(Schedulers.elastic());
         assertThat(blobIdFuture.toFuture()).isNotCompleted();
     }
 
     @Test
     void readBytesShouldNotCompleteWhenDoesNotAwait() {
-        BlobId blobId = testee().save(BucketName.DEFAULT, BIG_STRING).block();
-        Mono<byte[]> resultFuture = testee.readBytes(BucketName.DEFAULT, blobId).subscribeOn(Schedulers.elastic());
+        BlobId blobId = testee().save(testee.getDefaultBucketName(), BIG_STRING).block();
+        Mono<byte[]> resultFuture = testee.readBytes(testee.getDefaultBucketName(), blobId).subscribeOn(Schedulers.elastic());
         assertThat(resultFuture.toFuture()).isNotCompleted();
     }
 }
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorageBlobsDAOBuilderTest.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorageBlobsDAOBuilderTest.java
index 3501086..87b87f6 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorageBlobsDAOBuilderTest.java
+++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorageBlobsDAOBuilderTest.java
@@ -21,6 +21,8 @@ package org.apache.james.blob.objectstorage.aws;
 
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
+import java.util.UUID;
+
 import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.api.HashBlobId;
 import org.apache.james.blob.objectstorage.ObjectStorageBlobsDAO;
@@ -34,14 +36,14 @@ import org.junit.jupiter.api.extension.ExtendWith;
 @ExtendWith(DockerAwsS3Extension.class)
 class AwsS3ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlobsDAOContract {
 
-    private BucketName bucketName;
+    private BucketName defaultBucketName;
     private AwsS3AuthConfiguration configuration;
     private AwsS3ObjectStorage awsS3ObjectStorage;
 
     @BeforeEach
     void setUp(DockerAwsS3Container dockerAwsS3Container) {
         awsS3ObjectStorage = new AwsS3ObjectStorage();
-        bucketName = BucketName.DEFAULT;
+        defaultBucketName = BucketName.of(UUID.randomUUID().toString());
         configuration = AwsS3AuthConfiguration.builder()
             .endpoint(dockerAwsS3Container.getEndpoint())
             .accessKeyId(DockerAwsS3Container.ACCESS_KEY_ID)
@@ -55,8 +57,8 @@ class AwsS3ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlobsDAOCont
     }
 
     @Override
-    public BucketName bucketName() {
-        return bucketName;
+    public BucketName defaultBucketName() {
+        return defaultBucketName;
     }
 
     @Test
@@ -73,7 +75,7 @@ class AwsS3ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlobsDAOCont
     void blobIdFactoryIsMandatoryToBuildBlobsDAO() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(configuration)
-            .defaultBucketName(bucketName)
+            .defaultBucketName(defaultBucketName)
             .blobIdFactory(null);
 
         assertThatThrownBy(builder::build).isInstanceOf(IllegalStateException.class);
@@ -83,7 +85,7 @@ class AwsS3ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlobsDAOCont
     void builtBlobsDAOCanStoreAndRetrieve() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(configuration)
-            .defaultBucketName(bucketName)
+            .defaultBucketName(defaultBucketName)
             .blobIdFactory(new HashBlobId.Factory())
             .putBlob(awsS3ObjectStorage.putBlob(configuration));
 
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone2ObjectStorageBlobsDAOBuilderTest.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone2ObjectStorageBlobsDAOBuilderTest.java
index b1178a6..38d2386 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone2ObjectStorageBlobsDAOBuilderTest.java
+++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone2ObjectStorageBlobsDAOBuilderTest.java
@@ -22,6 +22,7 @@ package org.apache.james.blob.objectstorage.swift;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import java.net.URI;
+import java.util.UUID;
 
 import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.api.HashBlobId;
@@ -41,13 +42,13 @@ class SwiftKeystone2ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlo
     private static final UserName USER_NAME = UserName.of("demo");
     private static final Credentials PASSWORD = Credentials.of("demo");
     private static final Identity SWIFT_IDENTITY = Identity.of(TENANT_NAME, USER_NAME);
-    private BucketName bucketName;
+    private BucketName defaultBucketName;
     private URI endpoint;
     private SwiftKeystone2ObjectStorage.Configuration testConfig;
 
     @BeforeEach
     void setUp(DockerSwift dockerSwift) {
-        bucketName = BucketName.DEFAULT;
+        defaultBucketName = BucketName.of(UUID.randomUUID().toString());
         endpoint = dockerSwift.keystoneV2Endpoint();
         testConfig = SwiftKeystone2ObjectStorage.configBuilder()
             .endpoint(endpoint)
@@ -57,8 +58,8 @@ class SwiftKeystone2ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlo
     }
 
     @Override
-    public BucketName bucketName() {
-        return bucketName;
+    public BucketName defaultBucketName() {
+        return defaultBucketName;
     }
 
     @Test
@@ -75,7 +76,7 @@ class SwiftKeystone2ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlo
     void blobIdFactoryIsMandatoryToBuildBlobsDAO() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(testConfig)
-            .defaultBucketName(bucketName)
+            .defaultBucketName(defaultBucketName)
             .blobIdFactory(null);
 
         assertThatThrownBy(builder::build).isInstanceOf(IllegalStateException.class);
@@ -85,7 +86,7 @@ class SwiftKeystone2ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlo
     void builtBlobsDAOCanStoreAndRetrieve() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(testConfig)
-            .defaultBucketName(bucketName)
+            .defaultBucketName(defaultBucketName)
             .blobIdFactory(new HashBlobId.Factory());
 
         assertBlobsDAOCanStoreAndRetrieve(builder);
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone3ObjectStorageBlobsDAOBuilderTest.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone3ObjectStorageBlobsDAOBuilderTest.java
index b7d24ae..246efae 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone3ObjectStorageBlobsDAOBuilderTest.java
+++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone3ObjectStorageBlobsDAOBuilderTest.java
@@ -23,6 +23,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.UUID;
 
 import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.api.HashBlobId;
@@ -68,7 +69,7 @@ class SwiftKeystone3ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlo
             .credentials(DEMO_PASSWORD)
             .project(Project.of(PROJECT_NAME, DOMAIN_ID));
 
-    private BucketName bucketName;
+    private BucketName defaultBucketName;
 
     private SwiftKeystone3ObjectStorage.Configuration testConfig;
     private DockerSwift dockerSwift;
@@ -77,7 +78,7 @@ class SwiftKeystone3ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlo
     @BeforeEach
     void setUp(DockerSwift dockerSwift) {
         this.dockerSwift = dockerSwift;
-        bucketName = BucketName.DEFAULT;
+        defaultBucketName = BucketName.of(UUID.randomUUID().toString());
         testConfig = PROJECT_CONFIG
             .endpoint(dockerSwift.keystoneV3Endpoint())
             .build();
@@ -90,8 +91,8 @@ class SwiftKeystone3ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlo
     }
 
     @Override
-    public BucketName bucketName() {
-        return bucketName;
+    public BucketName defaultBucketName() {
+        return defaultBucketName;
     }
 
     @Test
@@ -108,7 +109,7 @@ class SwiftKeystone3ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlo
     void blobIdFactoryIsMandatoryToBuildBlobsDAO() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(testConfig)
-            .defaultBucketName(bucketName)
+            .defaultBucketName(defaultBucketName)
             .blobIdFactory(null);
 
         assertThatThrownBy(builder::build).isInstanceOf(IllegalStateException.class);
@@ -121,7 +122,7 @@ class SwiftKeystone3ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlo
             configBuilders.get(key).endpoint(dockerSwift.keystoneV3Endpoint()).build();
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(config)
-            .defaultBucketName(bucketName)
+            .defaultBucketName(defaultBucketName)
             .blobIdFactory(new HashBlobId.Factory());
 
         assertBlobsDAOCanStoreAndRetrieve(builder);
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftTempAuthObjectStorageBlobsDAOBuilderTest.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftTempAuthObjectStorageBlobsDAOBuilderTest.java
index 971d7f4..853b382 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftTempAuthObjectStorageBlobsDAOBuilderTest.java
+++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftTempAuthObjectStorageBlobsDAOBuilderTest.java
@@ -22,6 +22,7 @@ package org.apache.james.blob.objectstorage.swift;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import java.net.URI;
+import java.util.UUID;
 
 import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.api.HashBlobId;
@@ -41,13 +42,13 @@ class SwiftTempAuthObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlob
     private static final UserName USER_NAME = UserName.of("tester");
     private static final Credentials PASSWORD = Credentials.of("testing");
     private static final Identity SWIFT_IDENTITY = Identity.of(TENANT_NAME, USER_NAME);
-    private BucketName bucketName;
+    private BucketName defaultBucketName;
     private URI endpoint;
     private SwiftTempAuthObjectStorage.Configuration testConfig;
 
     @BeforeEach
     void setUp(DockerSwift dockerSwift) {
-        bucketName = BucketName.DEFAULT;
+        defaultBucketName = BucketName.of(UUID.randomUUID().toString());
         endpoint = dockerSwift.swiftEndpoint();
         testConfig = SwiftTempAuthObjectStorage.configBuilder()
             .endpoint(endpoint)
@@ -59,8 +60,8 @@ class SwiftTempAuthObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlob
     }
 
     @Override
-    public BucketName bucketName() {
-        return bucketName;
+    public BucketName defaultBucketName() {
+        return defaultBucketName;
     }
 
     @Test
@@ -77,7 +78,7 @@ class SwiftTempAuthObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlob
     void blobIdFactoryIsMandatoryToBuildBlobsDAO() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(testConfig)
-            .defaultBucketName(bucketName)
+            .defaultBucketName(defaultBucketName)
             .blobIdFactory(null);
 
         assertThatThrownBy(builder::build).isInstanceOf(IllegalStateException.class);
@@ -87,7 +88,7 @@ class SwiftTempAuthObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlob
     void builtBlobsDAOCanStoreAndRetrieve() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(testConfig)
-            .defaultBucketName(bucketName)
+            .defaultBucketName(defaultBucketName)
             .blobIdFactory(new HashBlobId.Factory());
 
         assertBlobsDAOCanStoreAndRetrieve(builder);
diff --git a/server/blob/blob-union/src/test/java/org/apache/james/blob/union/UnionBlobStoreTest.java b/server/blob/blob-union/src/test/java/org/apache/james/blob/union/UnionBlobStoreTest.java
index abda30a..ab197cb 100644
--- a/server/blob/blob-union/src/test/java/org/apache/james/blob/union/UnionBlobStoreTest.java
+++ b/server/blob/blob-union/src/test/java/org/apache/james/blob/union/UnionBlobStoreTest.java
@@ -68,7 +68,7 @@ class UnionBlobStoreTest implements BlobStoreContract {
 
         @Override
         public BucketName getDefaultBucketName() {
-            throw new RuntimeException("broken everywhere");
+            return BucketName.DEFAULT;
         }
 
         @Override
@@ -112,7 +112,7 @@ class UnionBlobStoreTest implements BlobStoreContract {
 
         @Override
         public BucketName getDefaultBucketName() {
-            throw new RuntimeException("broken everywhere");
+            return BucketName.DEFAULT;
         }
 
         @Override
@@ -180,12 +180,12 @@ class UnionBlobStoreTest implements BlobStoreContract {
                 .current(new ThrowingBlobStore())
                 .legacy(legacyBlobStore)
                 .build();
-            BlobId blobId = unionBlobStore.save(BucketName.DEFAULT, BLOB_CONTENT).block();
+            BlobId blobId = unionBlobStore.save(unionBlobStore.getDefaultBucketName(), BLOB_CONTENT).block();
 
             SoftAssertions.assertSoftly(softly -> {
-                softly.assertThat(unionBlobStore.read(BucketName.DEFAULT, blobId))
+                softly.assertThat(unionBlobStore.read(unionBlobStore.getDefaultBucketName(), blobId))
                     .hasSameContentAs(new ByteArrayInputStream(BLOB_CONTENT));
-                softly.assertThat(legacyBlobStore.read(BucketName.DEFAULT, blobId))
+                softly.assertThat(legacyBlobStore.read(unionBlobStore.getDefaultBucketName(), blobId))
                     .hasSameContentAs(new ByteArrayInputStream(BLOB_CONTENT));
             });
         }
@@ -197,12 +197,12 @@ class UnionBlobStoreTest implements BlobStoreContract {
                 .current(new ThrowingBlobStore())
                 .legacy(legacyBlobStore)
                 .build();
-            BlobId blobId = unionBlobStore.save(BucketName.DEFAULT, new ByteArrayInputStream(BLOB_CONTENT)).block();
+            BlobId blobId = unionBlobStore.save(unionBlobStore.getDefaultBucketName(), new ByteArrayInputStream(BLOB_CONTENT)).block();
 
             SoftAssertions.assertSoftly(softly -> {
-                softly.assertThat(unionBlobStore.read(BucketName.DEFAULT, blobId))
+                softly.assertThat(unionBlobStore.read(unionBlobStore.getDefaultBucketName(), blobId))
                     .hasSameContentAs(new ByteArrayInputStream(BLOB_CONTENT));
-                softly.assertThat(legacyBlobStore.read(BucketName.DEFAULT, blobId))
+                softly.assertThat(legacyBlobStore.read(unionBlobStore.getDefaultBucketName(), blobId))
                     .hasSameContentAs(new ByteArrayInputStream(BLOB_CONTENT));
             });
         }
@@ -218,12 +218,12 @@ class UnionBlobStoreTest implements BlobStoreContract {
                 .current(new FailingBlobStore())
                 .legacy(legacyBlobStore)
                 .build();
-            BlobId blobId = unionBlobStore.save(BucketName.DEFAULT, BLOB_CONTENT).block();
+            BlobId blobId = unionBlobStore.save(unionBlobStore.getDefaultBucketName(), BLOB_CONTENT).block();
 
             SoftAssertions.assertSoftly(softly -> {
-                softly.assertThat(unionBlobStore.read(BucketName.DEFAULT, blobId))
+                softly.assertThat(unionBlobStore.read(unionBlobStore.getDefaultBucketName(), blobId))
                     .hasSameContentAs(new ByteArrayInputStream(BLOB_CONTENT));
-                softly.assertThat(legacyBlobStore.read(BucketName.DEFAULT, blobId))
+                softly.assertThat(legacyBlobStore.read(unionBlobStore.getDefaultBucketName(), blobId))
                     .hasSameContentAs(new ByteArrayInputStream(BLOB_CONTENT));
             });
         }
@@ -235,12 +235,12 @@ class UnionBlobStoreTest implements BlobStoreContract {
                 .current(new FailingBlobStore())
                 .legacy(legacyBlobStore)
                 .build();
-            BlobId blobId = unionBlobStore.save(BucketName.DEFAULT, new ByteArrayInputStream(BLOB_CONTENT)).block();
+            BlobId blobId = unionBlobStore.save(unionBlobStore.getDefaultBucketName(), new ByteArrayInputStream(BLOB_CONTENT)).block();
 
             SoftAssertions.assertSoftly(softly -> {
-                softly.assertThat(unionBlobStore.read(BucketName.DEFAULT, blobId))
+                softly.assertThat(unionBlobStore.read(unionBlobStore.getDefaultBucketName(), blobId))
                     .hasSameContentAs(new ByteArrayInputStream(BLOB_CONTENT));
-                softly.assertThat(legacyBlobStore.read(BucketName.DEFAULT, blobId))
+                softly.assertThat(legacyBlobStore.read(unionBlobStore.getDefaultBucketName(), blobId))
                     .hasSameContentAs(new ByteArrayInputStream(BLOB_CONTENT));
             });
         }
@@ -257,9 +257,9 @@ class UnionBlobStoreTest implements BlobStoreContract {
                 .current(new ThrowingBlobStore())
                 .legacy(legacyBlobStore)
                 .build();
-            BlobId blobId = legacyBlobStore.save(BucketName.DEFAULT, BLOB_CONTENT).block();
+            BlobId blobId = legacyBlobStore.save(unionBlobStore.getDefaultBucketName(), BLOB_CONTENT).block();
 
-            assertThat(unionBlobStore.read(BucketName.DEFAULT, blobId))
+            assertThat(unionBlobStore.read(unionBlobStore.getDefaultBucketName(), blobId))
                 .hasSameContentAs(new ByteArrayInputStream(BLOB_CONTENT));
         }
 
@@ -271,9 +271,9 @@ class UnionBlobStoreTest implements BlobStoreContract {
                 .current(new ThrowingBlobStore())
                 .legacy(legacyBlobStore)
                 .build();
-            BlobId blobId = legacyBlobStore.save(BucketName.DEFAULT, BLOB_CONTENT).block();
+            BlobId blobId = legacyBlobStore.save(unionBlobStore.getDefaultBucketName(), BLOB_CONTENT).block();
 
-            assertThat(unionBlobStore.readBytes(BucketName.DEFAULT, blobId).block())
+            assertThat(unionBlobStore.readBytes(unionBlobStore.getDefaultBucketName(), blobId).block())
                 .isEqualTo(BLOB_CONTENT);
         }
 
@@ -289,9 +289,9 @@ class UnionBlobStoreTest implements BlobStoreContract {
                 .current(new FailingBlobStore())
                 .legacy(legacyBlobStore)
                 .build();
-            BlobId blobId = legacyBlobStore.save(BucketName.DEFAULT, BLOB_CONTENT).block();
+            BlobId blobId = legacyBlobStore.save(unionBlobStore.getDefaultBucketName(), BLOB_CONTENT).block();
 
-            assertThat(unionBlobStore.read(BucketName.DEFAULT, blobId))
+            assertThat(unionBlobStore.read(unionBlobStore.getDefaultBucketName(), blobId))
                 .hasSameContentAs(new ByteArrayInputStream(BLOB_CONTENT));
         }
 
@@ -302,9 +302,9 @@ class UnionBlobStoreTest implements BlobStoreContract {
                 .current(new FailingBlobStore())
                 .legacy(legacyBlobStore)
                 .build();
-            BlobId blobId = legacyBlobStore.save(BucketName.DEFAULT, BLOB_CONTENT).block();
+            BlobId blobId = legacyBlobStore.save(unionBlobStore.getDefaultBucketName(), BLOB_CONTENT).block();
 
-            assertThat(unionBlobStore.readBytes(BucketName.DEFAULT, blobId).block())
+            assertThat(unionBlobStore.readBytes(unionBlobStore.getDefaultBucketName(), blobId).block())
                 .isEqualTo(BLOB_CONTENT);
         }
     }
@@ -316,15 +316,15 @@ class UnionBlobStoreTest implements BlobStoreContract {
 
         Stream<Function<UnionBlobStore, Mono<?>>> blobStoreOperationsReturnFutures() {
             return Stream.of(
-                blobStore -> blobStore.save(BucketName.DEFAULT, BLOB_CONTENT),
-                blobStore -> blobStore.save(BucketName.DEFAULT, STRING_CONTENT),
-                blobStore -> blobStore.save(BucketName.DEFAULT, new ByteArrayInputStream(BLOB_CONTENT)),
-                blobStore -> blobStore.readBytes(BucketName.DEFAULT, BLOB_ID_FACTORY.randomId()));
+                blobStore -> blobStore.save(blobStore.getDefaultBucketName(), BLOB_CONTENT),
+                blobStore -> blobStore.save(blobStore.getDefaultBucketName(), STRING_CONTENT),
+                blobStore -> blobStore.save(blobStore.getDefaultBucketName(), new ByteArrayInputStream(BLOB_CONTENT)),
+                blobStore -> blobStore.readBytes(blobStore.getDefaultBucketName(), BLOB_ID_FACTORY.randomId()));
         }
 
         Stream<Function<UnionBlobStore, InputStream>> blobStoreOperationsNotReturnFutures() {
             return Stream.of(
-                blobStore -> blobStore.read(BucketName.DEFAULT, BLOB_ID_FACTORY.randomId()));
+                blobStore -> blobStore.read(blobStore.getDefaultBucketName(), BLOB_ID_FACTORY.randomId()));
         }
 
         Stream<Arguments> blobStoresCauseReturnExceptionallyFutures() {
@@ -380,81 +380,81 @@ class UnionBlobStoreTest implements BlobStoreContract {
 
     @Test
     void readShouldReturnFromCurrentWhenAvailable() {
-        BlobId blobId = currentBlobStore.save(BucketName.DEFAULT, BLOB_CONTENT).block();
+        BlobId blobId = currentBlobStore.save(currentBlobStore.getDefaultBucketName(), BLOB_CONTENT).block();
 
-        assertThat(unionBlobStore.read(BucketName.DEFAULT, blobId))
+        assertThat(unionBlobStore.read(unionBlobStore.getDefaultBucketName(), blobId))
             .hasSameContentAs(new ByteArrayInputStream(BLOB_CONTENT));
     }
 
     @Test
     void readShouldReturnFromLegacyWhenCurrentNotAvailable() {
-        BlobId blobId = legacyBlobStore.save(BucketName.DEFAULT, BLOB_CONTENT).block();
+        BlobId blobId = legacyBlobStore.save(unionBlobStore.getDefaultBucketName(), BLOB_CONTENT).block();
 
-        assertThat(unionBlobStore.read(BucketName.DEFAULT, blobId))
+        assertThat(unionBlobStore.read(unionBlobStore.getDefaultBucketName(), blobId))
             .hasSameContentAs(new ByteArrayInputStream(BLOB_CONTENT));
     }
 
     @Test
     void readBytesShouldReturnFromCurrentWhenAvailable() {
-        BlobId blobId = currentBlobStore.save(BucketName.DEFAULT, BLOB_CONTENT).block();
+        BlobId blobId = currentBlobStore.save(currentBlobStore.getDefaultBucketName(), BLOB_CONTENT).block();
 
-        assertThat(unionBlobStore.readBytes(BucketName.DEFAULT, blobId).block())
+        assertThat(unionBlobStore.readBytes(currentBlobStore.getDefaultBucketName(), blobId).block())
             .isEqualTo(BLOB_CONTENT);
     }
 
     @Test
     void readBytesShouldReturnFromLegacyWhenCurrentNotAvailable() {
-        BlobId blobId = legacyBlobStore.save(BucketName.DEFAULT, BLOB_CONTENT).block();
+        BlobId blobId = legacyBlobStore.save(unionBlobStore.getDefaultBucketName(), BLOB_CONTENT).block();
 
-        assertThat(unionBlobStore.readBytes(BucketName.DEFAULT, blobId).block())
+        assertThat(unionBlobStore.readBytes(unionBlobStore.getDefaultBucketName(), blobId).block())
             .isEqualTo(BLOB_CONTENT);
     }
 
     @Test
     void saveShouldWriteToCurrent() {
-        BlobId blobId = unionBlobStore.save(BucketName.DEFAULT, BLOB_CONTENT).block();
+        BlobId blobId = unionBlobStore.save(unionBlobStore.getDefaultBucketName(), BLOB_CONTENT).block();
 
-        assertThat(currentBlobStore.readBytes(BucketName.DEFAULT, blobId).block())
+        assertThat(currentBlobStore.readBytes(currentBlobStore.getDefaultBucketName(), blobId).block())
             .isEqualTo(BLOB_CONTENT);
     }
 
     @Test
     void saveShouldNotWriteToLegacy() {
-        BlobId blobId = unionBlobStore.save(BucketName.DEFAULT, BLOB_CONTENT).block();
+        BlobId blobId = unionBlobStore.save(unionBlobStore.getDefaultBucketName(), BLOB_CONTENT).block();
 
-        assertThatThrownBy(() -> legacyBlobStore.readBytes(BucketName.DEFAULT, blobId).block())
+        assertThatThrownBy(() -> legacyBlobStore.readBytes(legacyBlobStore.getDefaultBucketName(), blobId).block())
             .isInstanceOf(ObjectStoreException.class);
     }
 
     @Test
     void saveStringShouldWriteToCurrent() {
-        BlobId blobId = unionBlobStore.save(BucketName.DEFAULT, STRING_CONTENT).block();
+        BlobId blobId = unionBlobStore.save(unionBlobStore.getDefaultBucketName(), STRING_CONTENT).block();
 
-        assertThat(currentBlobStore.readBytes(BucketName.DEFAULT, blobId).block())
+        assertThat(currentBlobStore.readBytes(currentBlobStore.getDefaultBucketName(), blobId).block())
             .isEqualTo(BLOB_CONTENT);
     }
 
     @Test
     void saveStringShouldNotWriteToLegacy() {
-        BlobId blobId = unionBlobStore.save(BucketName.DEFAULT, STRING_CONTENT).block();
+        BlobId blobId = unionBlobStore.save(unionBlobStore.getDefaultBucketName(), STRING_CONTENT).block();
 
-        assertThatThrownBy(() -> legacyBlobStore.readBytes(BucketName.DEFAULT, blobId).block())
+        assertThatThrownBy(() -> legacyBlobStore.readBytes(legacyBlobStore.getDefaultBucketName(), blobId).block())
             .isInstanceOf(ObjectStoreException.class);
     }
 
     @Test
     void saveInputStreamShouldWriteToCurrent() {
-        BlobId blobId = unionBlobStore.save(BucketName.DEFAULT, new ByteArrayInputStream(BLOB_CONTENT)).block();
+        BlobId blobId = unionBlobStore.save(unionBlobStore.getDefaultBucketName(), new ByteArrayInputStream(BLOB_CONTENT)).block();
 
-        assertThat(currentBlobStore.readBytes(BucketName.DEFAULT, blobId).block())
+        assertThat(currentBlobStore.readBytes(currentBlobStore.getDefaultBucketName(), blobId).block())
             .isEqualTo(BLOB_CONTENT);
     }
 
     @Test
     void saveInputStreamShouldNotWriteToLegacy() {
-        BlobId blobId = unionBlobStore.save(BucketName.DEFAULT, new ByteArrayInputStream(BLOB_CONTENT)).block();
+        BlobId blobId = unionBlobStore.save(unionBlobStore.getDefaultBucketName(), new ByteArrayInputStream(BLOB_CONTENT)).block();
 
-        assertThatThrownBy(() -> legacyBlobStore.readBytes(BucketName.DEFAULT, blobId).block())
+        assertThatThrownBy(() -> legacyBlobStore.readBytes(legacyBlobStore.getDefaultBucketName(), blobId).block())
             .isInstanceOf(ObjectStoreException.class);
     }
 
diff --git a/server/blob/mail-store/src/test/java/org/apache/james/blob/mail/MimeMessageStoreTest.java b/server/blob/mail-store/src/test/java/org/apache/james/blob/mail/MimeMessageStoreTest.java
index 6053366..9bd8327 100644
--- a/server/blob/mail-store/src/test/java/org/apache/james/blob/mail/MimeMessageStoreTest.java
+++ b/server/blob/mail-store/src/test/java/org/apache/james/blob/mail/MimeMessageStoreTest.java
@@ -28,7 +28,6 @@ import javax.mail.internet.MimeMessage;
 
 import org.apache.james.blob.api.BlobId;
 import org.apache.james.blob.api.BlobStore;
-import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.api.HashBlobId;
 import org.apache.james.blob.api.Store;
 import org.apache.james.blob.memory.MemoryBlobStore;
@@ -113,7 +112,7 @@ class MimeMessageStoreTest {
                 BlobId headerBlobId = parts.getHeaderBlobId();
                 BlobId bodyBlobId = parts.getBodyBlobId();
 
-                softly.assertThat(new String(blobStore.readBytes(BucketName.DEFAULT, headerBlobId).block(), StandardCharsets.UTF_8))
+                softly.assertThat(new String(blobStore.readBytes(blobStore.getDefaultBucketName(), headerBlobId).block(), StandardCharsets.UTF_8))
                     .isEqualTo("Date: Thu, 6 Sep 2018 13:29:13 +0700 (ICT)\r\n" +
                         "From: any@any.com\r\n" +
                         "To: toddy@any.com\r\n" +
@@ -122,7 +121,7 @@ class MimeMessageStoreTest {
                         "MIME-Version: 1.0\r\n" +
                         "Content-Type: text/plain; charset=UTF-8\r\n" +
                         "Content-Transfer-Encoding: 7bit\r\n\r\n");
-                softly.assertThat(new String(blobStore.readBytes(BucketName.DEFAULT, bodyBlobId).block(), StandardCharsets.UTF_8))
+                softly.assertThat(new String(blobStore.readBytes(blobStore.getDefaultBucketName(), bodyBlobId).block(), StandardCharsets.UTF_8))
                     .isEqualTo("Important mail content");
             });
     }
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java
index 68b8a03..6f2b8e3 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java
@@ -106,7 +106,7 @@ public class DockerAwsS3TestRule implements GuiceModuleTestRule {
 
     @Override
     public Module getModule() {
-        BucketName bucketName = BucketName.of(UUID.randomUUID().toString());
+        BucketName defaultBucketName = BucketName.of(UUID.randomUUID().toString());
         AwsS3AuthConfiguration authConfiguration = AwsS3AuthConfiguration.builder()
             .endpoint(DockerAwsS3Singleton.singleton.getEndpoint())
             .accessKeyId(DockerAwsS3Container.ACCESS_KEY_ID)
@@ -119,7 +119,7 @@ public class DockerAwsS3TestRule implements GuiceModuleTestRule {
             .authConfiguration(authConfiguration)
             .aesSalt("c603a7327ee3dcbc031d8d34b1096c605feca5e1")
             .aesPassword("dockerAwsS3Encryption".toCharArray())
-            .defaultBucketName(Optional.of(bucketName))
+            .defaultBucketName(Optional.of(defaultBucketName))
             .build();
 
         return binder -> {
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/DockerSwiftTestRule.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/DockerSwiftTestRule.java
index 9289465..d706221 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/DockerSwiftTestRule.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/DockerSwiftTestRule.java
@@ -106,7 +106,7 @@ public class DockerSwiftTestRule implements GuiceModuleTestRule {
             .endpoint(swiftContainer.dockerSwift().keystoneV2Endpoint())
             .build();
 
-        BucketName bucketName = BucketName.of(UUID.randomUUID().toString());
+        BucketName defaultBucketName = BucketName.of(UUID.randomUUID().toString());
         ObjectStorageBlobConfiguration configuration = ObjectStorageBlobConfiguration.builder()
             .codec(payloadCodecFactory)
             .provider(ObjectStorageProvider.SWIFT)
@@ -116,7 +116,7 @@ public class DockerSwiftTestRule implements GuiceModuleTestRule {
                 Optional.empty()))
             .aesSalt("c603a7327ee3dcbc031d8d34b1096c605feca5e1")
             .aesPassword("dockerSwiftEncryption".toCharArray())
-            .defaultBucketName(Optional.of(bucketName))
+            .defaultBucketName(Optional.of(defaultBucketName))
             .build();
 
         return binder -> {
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobStoreModuleTest.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobStoreModuleTest.java
index 22b9f8d..38bafac 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobStoreModuleTest.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobStoreModuleTest.java
@@ -141,7 +141,7 @@ class ObjectStorageBlobStoreModuleTest {
 
         BlobStore blobStore = injector.getInstance(Key.get(BlobStore.class, Names.named(MetricableBlobStore.BLOB_STORE_IMPLEMENTATION)));
 
-        assertThatCode(() -> blobStore.save(BucketName.DEFAULT, new byte[] {0x00})).doesNotThrowAnyException();
+        assertThatCode(() -> blobStore.save(blobStore.getDefaultBucketName(), new byte[] {0x00})).doesNotThrowAnyException();
     }
 
 }
diff --git a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/ExportService.java b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/ExportService.java
index ee5bf96..0ccef9f 100644
--- a/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/ExportService.java
+++ b/server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/ExportService.java
@@ -27,7 +27,6 @@ import javax.inject.Inject;
 import org.apache.commons.io.FileUtils;
 import org.apache.james.blob.api.BlobId;
 import org.apache.james.blob.api.BlobStore;
-import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.export.api.BlobExportMechanism;
 import org.apache.james.blob.export.api.FileExtension;
 import org.apache.james.core.MailAddress;
@@ -77,7 +76,7 @@ class ExportService {
         try (FileBackedOutputStream fileOutputStream = new FileBackedOutputStream(FileUtils.ONE_MB_BI.intValue())) {
             zipper.zip(contentLoader(user), messages.toStream(), fileOutputStream);
             ByteSource byteSource = fileOutputStream.asByteSource();
-            return blobStore.save(BucketName.DEFAULT, byteSource.openStream()).block();
+            return blobStore.save(blobStore.getDefaultBucketName(), byteSource.openStream()).block();
         }
     }
 
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 aae07a5..0441abb 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
@@ -72,7 +72,6 @@ import java.util.stream.Stream;
 
 import org.apache.commons.configuration.DefaultConfigurationBuilder;
 import org.apache.james.blob.api.BlobId;
-import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.api.HashBlobId;
 import org.apache.james.blob.export.api.BlobExportMechanism;
 import org.apache.james.blob.memory.MemoryBlobStore;
@@ -1905,7 +1904,7 @@ class DeletedMessagesVaultRoutesTest {
 
             byte[] expectedZippedData = zippedMessagesData();
 
-            assertThat(blobStore.read(BucketName.DEFAULT, blobIdFactory.forPayload(expectedZippedData)))
+            assertThat(blobStore.read(blobStore.getDefaultBucketName(), blobIdFactory.forPayload(expectedZippedData)))
                 .hasSameContentAs(new ByteArrayInputStream(expectedZippedData));
         }
 
diff --git a/third-party/linshare/src/main/java/org/apache/james/linshare/LinshareBlobExportMechanism.java b/third-party/linshare/src/main/java/org/apache/james/linshare/LinshareBlobExportMechanism.java
index 69258eb..f01c301 100644
--- a/third-party/linshare/src/main/java/org/apache/james/linshare/LinshareBlobExportMechanism.java
+++ b/third-party/linshare/src/main/java/org/apache/james/linshare/LinshareBlobExportMechanism.java
@@ -28,7 +28,6 @@ import javax.inject.Inject;
 import org.apache.commons.io.FileUtils;
 import org.apache.james.blob.api.BlobId;
 import org.apache.james.blob.api.BlobStore;
-import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.export.api.BlobExportMechanism;
 import org.apache.james.blob.export.api.ExportedFileNamesGenerator;
 import org.apache.james.blob.export.api.FileExtension;
@@ -68,7 +67,7 @@ public class LinshareBlobExportMechanism implements BlobExportMechanism {
         String fileName = ExportedFileNamesGenerator.generateFileName(fileCustomPrefix, blobId, fileExtension);
         File tempFile = new File(tempDir, fileName);
         try {
-            FileUtils.copyInputStreamToFile(blobStore.read(BucketName.DEFAULT, blobId), tempFile);
+            FileUtils.copyInputStreamToFile(blobStore.read(blobStore.getDefaultBucketName(), blobId), tempFile);
             uploadAndShare(mailAddress, tempFile, explanation);
         } finally {
             FileUtils.forceDelete(tempFile);
diff --git a/third-party/linshare/src/test/java/org/apache/james/linshare/LinshareBlobExportMechanismTest.java b/third-party/linshare/src/test/java/org/apache/james/linshare/LinshareBlobExportMechanismTest.java
index ef9b6e4..542900a 100644
--- a/third-party/linshare/src/test/java/org/apache/james/linshare/LinshareBlobExportMechanismTest.java
+++ b/third-party/linshare/src/test/java/org/apache/james/linshare/LinshareBlobExportMechanismTest.java
@@ -32,7 +32,6 @@ import java.nio.charset.StandardCharsets;
 import java.util.Optional;
 
 import org.apache.james.blob.api.BlobId;
-import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.api.HashBlobId;
 import org.apache.james.blob.export.api.BlobExportMechanism;
 import org.apache.james.blob.export.api.FileExtension;
@@ -75,7 +74,7 @@ class LinshareBlobExportMechanismTest {
 
     @Test
     void exportShouldShareTheDocumentViaLinshare() throws Exception {
-        BlobId blobId = blobStore.save(BucketName.DEFAULT, FILE_CONTENT).block();
+        BlobId blobId = blobStore.save(blobStore.getDefaultBucketName(), FILE_CONTENT).block();
         String filePrefix = "deleted-message-of-bob@james.org-";
 
         testee.blobId(blobId)
@@ -94,7 +93,7 @@ class LinshareBlobExportMechanismTest {
 
     @Test
     void exportShouldSendAnEmailToSharee() throws Exception {
-        BlobId blobId = blobStore.save(BucketName.DEFAULT, FILE_CONTENT).block();
+        BlobId blobId = blobStore.save(blobStore.getDefaultBucketName(), FILE_CONTENT).block();
 
         testee.blobId(blobId)
             .with(new MailAddress(USER_2.getUsername()))
@@ -123,7 +122,7 @@ class LinshareBlobExportMechanismTest {
 
     @Test
     void exportShouldShareTheDocumentAndAllowDownloadViaLinshare() throws Exception {
-        BlobId blobId = blobStore.save(BucketName.DEFAULT, FILE_CONTENT).block();
+        BlobId blobId = blobStore.save(blobStore.getDefaultBucketName(), FILE_CONTENT).block();
 
         testee.blobId(blobId)
             .with(new MailAddress(USER_2.getUsername()))
@@ -153,7 +152,7 @@ class LinshareBlobExportMechanismTest {
 
     @Test
     void exportWithFilePrefixShouldCreateFileWithCustomPrefix() throws Exception {
-        BlobId blobId = blobStore.save(BucketName.DEFAULT, FILE_CONTENT).block();
+        BlobId blobId = blobStore.save(blobStore.getDefaultBucketName(), FILE_CONTENT).block();
         String filePrefix = "deleted-message-of-bob@james.org";
 
         testee.blobId(blobId)


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


[james-project] 08/12: JAMES-2806 Make namespace(defaultBucketName) configuration become optional

Posted by bt...@apache.org.
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 18bb63c4b1bc53e03652246050e249193dcfecb6
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Wed Jun 26 16:43:38 2019 +0700

    JAMES-2806 Make namespace(defaultBucketName) configuration become optional
---
 .../ObjectStorageBlobConfiguration.java            | 30 ++++++++++------------
 .../ObjectStorageBlobConfigurationTest.java        | 29 +++++++++++++++++++--
 .../objectstorage/aws/s3/DockerAwsS3TestRule.java  |  3 ++-
 .../objectstorage/swift/DockerSwiftTestRule.java   |  2 +-
 .../swift/ObjectStorageBlobConfigurationTest.java  |  6 ++---
 .../swift/ObjectStorageBlobStoreModuleTest.java    |  6 ++---
 .../swift/SwiftObjectStorageTest.java              | 12 ++++-----
 7 files changed, 56 insertions(+), 32 deletions(-)

diff --git a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfiguration.java b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfiguration.java
index f1fb395..05d0193 100644
--- a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfiguration.java
+++ b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfiguration.java
@@ -46,8 +46,8 @@ public class ObjectStorageBlobConfiguration {
 
     public static ObjectStorageBlobConfiguration from(Configuration configuration) throws ConfigurationException {
         String provider = configuration.getString(OBJECTSTORAGE_PROVIDER, null);
-        String namespace = configuration.getString(OBJECTSTORAGE_NAMESPACE, null);
         String codecName = configuration.getString(OBJECTSTORAGE_PAYLOAD_CODEC, null);
+        Optional<String> namespace = Optional.ofNullable(configuration.getString(OBJECTSTORAGE_NAMESPACE, null));
         Optional<String> aesSalt = Optional.ofNullable(configuration.getString(OBJECTSTORAGE_AES256_HEXSALT, null));
         Optional<char[]> aesPassword = Optional.ofNullable(configuration.getString(OBJECTSTORAGE_AES256_PASSWORD, null))
             .map(String::toCharArray);
@@ -55,9 +55,6 @@ public class ObjectStorageBlobConfiguration {
         if (Strings.isNullOrEmpty(provider)) {
             throw new ConfigurationException("Mandatory configuration value " + OBJECTSTORAGE_PROVIDER + " is missing from " + OBJECTSTORAGE_CONFIGURATION_NAME + " configuration");
         }
-        if (Strings.isNullOrEmpty(namespace)) {
-            throw new ConfigurationException("Mandatory configuration value " + OBJECTSTORAGE_NAMESPACE + " is missing from " + OBJECTSTORAGE_CONFIGURATION_NAME + " configuration");
-        }
         if (Strings.isNullOrEmpty(codecName)) {
             throw new ConfigurationException("Mandatory configuration value " + OBJECTSTORAGE_PAYLOAD_CODEC  + " is missing from " + OBJECTSTORAGE_CONFIGURATION_NAME + " configuration");
         }
@@ -70,10 +67,10 @@ public class ObjectStorageBlobConfiguration {
         return builder()
             .codec(payloadCodecFactory)
             .provider(ObjectStorageProvider.from(provider))
-            .bucketName(BucketName.of(namespace))
             .authConfiguration(authConfiguration(provider, configuration))
             .aesSalt(aesSalt)
             .aesPassword(aesPassword)
+            .defaultBucketName(namespace.map(BucketName::of))
             .build();
     }
 
@@ -88,7 +85,7 @@ public class ObjectStorageBlobConfiguration {
     }
 
     public static Builder.RequirePayloadCodec builder() {
-        return payloadCodec -> provider -> container -> authConfiguration -> new Builder.ReadyToBuild(payloadCodec, provider, container, authConfiguration);
+        return payloadCodec -> provider -> authConfiguration -> new Builder.ReadyToBuild(payloadCodec, provider, authConfiguration);
     }
 
     public interface Builder {
@@ -99,12 +96,7 @@ public class ObjectStorageBlobConfiguration {
 
         @FunctionalInterface
         interface RequireProvider {
-            RequireContainerName provider(ObjectStorageProvider provider);
-        }
-
-        @FunctionalInterface
-        interface RequireContainerName {
-            RequireAuthConfiguration bucketName(BucketName bucketName);
+            RequireAuthConfiguration provider(ObjectStorageProvider provider);
         }
 
         @FunctionalInterface
@@ -116,22 +108,21 @@ public class ObjectStorageBlobConfiguration {
 
             private final PayloadCodecFactory payloadCodecFactory;
             private final ObjectStorageProvider provider;
-            private final BucketName bucketName;
             private final SpecificAuthConfiguration specificAuthConfiguration;
 
             private Optional<String> aesSalt;
             private Optional<char[]> aesPassword;
+            private Optional<BucketName> defaultBucketName;
 
             public ReadyToBuild(PayloadCodecFactory payloadCodecFactory,
                                 ObjectStorageProvider provider,
-                                BucketName bucketName,
                                 SpecificAuthConfiguration specificAuthConfiguration) {
                 this.aesSalt = Optional.empty();
                 this.aesPassword = Optional.empty();
                 this.payloadCodecFactory = payloadCodecFactory;
                 this.provider = provider;
-                this.bucketName = bucketName;
                 this.specificAuthConfiguration = specificAuthConfiguration;
+                this.defaultBucketName = Optional.empty();
             }
 
             public ReadyToBuild aesSalt(String aesSalt) {
@@ -152,6 +143,11 @@ public class ObjectStorageBlobConfiguration {
                 return this;
             }
 
+            public ReadyToBuild defaultBucketName(Optional<BucketName> defaultBucketName) {
+                this.defaultBucketName = defaultBucketName;
+                return this;
+            }
+
             public ObjectStorageBlobConfiguration build() {
                 if (payloadCodecFactory == PayloadCodecFactory.AES256) {
                     aesSalt.filter(s -> !s.isEmpty())
@@ -160,7 +156,9 @@ public class ObjectStorageBlobConfiguration {
                         .orElseThrow(() -> new IllegalStateException("AES code requires an non-empty password parameter"));
                 }
 
-                return new ObjectStorageBlobConfiguration(payloadCodecFactory, provider, bucketName, specificAuthConfiguration, aesSalt, aesPassword);
+                BucketName defaultBucketName = this.defaultBucketName.orElse(BucketName.DEFAULT);
+
+                return new ObjectStorageBlobConfiguration(payloadCodecFactory, provider, defaultBucketName, specificAuthConfiguration, aesSalt, aesPassword);
             }
 
         }
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfigurationTest.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfigurationTest.java
index 4d2798f..30578bc 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfigurationTest.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/ObjectStorageBlobConfigurationTest.java
@@ -8,6 +8,7 @@ import java.util.stream.Stream;
 
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.MapConfiguration;
+import org.apache.james.blob.api.BucketName;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtensionContext;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -22,7 +23,6 @@ class ObjectStorageBlobConfigurationTest {
 
     static final ImmutableMap<String, Object> CONFIGURATION_WITHOUT_CODEC = ImmutableMap.<String, Object>builder()
         .put("objectstorage.provider", "swift")
-        .put("objectstorage.namespace", "foo")
         .put("objectstorage.swift.authapi", "tmpauth")
         .put("objectstorage.swift.endpoint", "http://swift/endpoint")
         .put("objectstorage.swift.credentials", "testing")
@@ -40,7 +40,7 @@ class ObjectStorageBlobConfigurationTest {
     static class RequiredParameters implements ArgumentsProvider {
         @Override
         public Stream<? extends Arguments> provideArguments(ExtensionContext context) {
-            return Stream.of("objectstorage.provider", "objectstorage.namespace", "objectstorage.swift.authapi", "objectstorage.payload.codec")
+            return Stream.of("objectstorage.provider", "objectstorage.swift.authapi", "objectstorage.payload.codec")
                     .map(Arguments::of);
         }
     }
@@ -156,4 +156,29 @@ class ObjectStorageBlobConfigurationTest {
             .isInstanceOf(ConfigurationException.class)
             .hasMessage("Unknown object storage provider: unknown");
     }
+
+    @Test
+    void fromShouldParseNameSpaceWhenSpecified() throws Exception {
+        String bucketNameAsString = "my-bucket";
+        MapConfiguration configuration = new MapConfiguration(
+            ImmutableMap.<String, Object>builder()
+                .putAll(VALID_CONFIGURATION)
+                .put("objectstorage.namespace", bucketNameAsString)
+                .build());
+
+         assertThat(ObjectStorageBlobConfiguration.from(configuration).getNamespace())
+            .isEqualTo(BucketName.of(bucketNameAsString));
+    }
+
+     @Test
+    void fromShouldUseTheDefaultValueWhenDontSpecifyNameSpace() throws Exception {
+        MapConfiguration configuration = new MapConfiguration(
+            ImmutableMap.<String, Object>builder()
+                .putAll(VALID_CONFIGURATION)
+                .build());
+
+         assertThat(ObjectStorageBlobConfiguration.from(configuration).getNamespace())
+            .isEqualTo(BucketName.DEFAULT);
+    }
+
 }
\ No newline at end of file
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java
index b8bf038..68b8a03 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.modules.objectstorage.aws.s3;
 
+import java.util.Optional;
 import java.util.UUID;
 
 import javax.inject.Inject;
@@ -115,10 +116,10 @@ public class DockerAwsS3TestRule implements GuiceModuleTestRule {
         ObjectStorageBlobConfiguration configuration = ObjectStorageBlobConfiguration.builder()
             .codec(payloadCodecFactory)
             .provider(ObjectStorageProvider.AWSS3)
-            .bucketName(bucketName)
             .authConfiguration(authConfiguration)
             .aesSalt("c603a7327ee3dcbc031d8d34b1096c605feca5e1")
             .aesPassword("dockerAwsS3Encryption".toCharArray())
+            .defaultBucketName(Optional.of(bucketName))
             .build();
 
         return binder -> {
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/DockerSwiftTestRule.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/DockerSwiftTestRule.java
index 7f08fe1..9289465 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/DockerSwiftTestRule.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/DockerSwiftTestRule.java
@@ -110,13 +110,13 @@ public class DockerSwiftTestRule implements GuiceModuleTestRule {
         ObjectStorageBlobConfiguration configuration = ObjectStorageBlobConfiguration.builder()
             .codec(payloadCodecFactory)
             .provider(ObjectStorageProvider.SWIFT)
-            .bucketName(bucketName)
             .authConfiguration(new SwiftAuthConfiguration(SwiftKeystone2ObjectStorage.AUTH_API_NAME,
                 Optional.empty(),
                 Optional.of(authConfiguration),
                 Optional.empty()))
             .aesSalt("c603a7327ee3dcbc031d8d34b1096c605feca5e1")
             .aesPassword("dockerSwiftEncryption".toCharArray())
+            .defaultBucketName(Optional.of(bucketName))
             .build();
 
         return binder -> {
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobConfigurationTest.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobConfigurationTest.java
index 6e159b9..5b777c7 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobConfigurationTest.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobConfigurationTest.java
@@ -97,7 +97,6 @@ class ObjectStorageBlobConfigurationTest {
                 ObjectStorageBlobConfiguration.builder()
                     .codec(PayloadCodecFactory.DEFAULT)
                     .provider(ObjectStorageProvider.SWIFT)
-                    .bucketName(BucketName.of("foo"))
                     .authConfiguration(new SwiftAuthConfiguration(SwiftTempAuthObjectStorage.AUTH_API_NAME,
                         Optional.of(SwiftTempAuthObjectStorage.configBuilder()
                             .endpoint(URI.create("http://swift/endpoint"))
@@ -109,6 +108,7 @@ class ObjectStorageBlobConfigurationTest {
                             .build()),
                         Optional.empty(),
                         Optional.empty()))
+                    .defaultBucketName(Optional.of(BucketName.of("foo")))
                     .build());
     }
 
@@ -130,7 +130,6 @@ class ObjectStorageBlobConfigurationTest {
                 ObjectStorageBlobConfiguration.builder()
                     .codec(PayloadCodecFactory.DEFAULT)
                     .provider(ObjectStorageProvider.SWIFT)
-                    .bucketName(BucketName.of("foo"))
                     .authConfiguration(new SwiftAuthConfiguration(SwiftKeystone2ObjectStorage.AUTH_API_NAME,
                         Optional.empty(),
                         Optional.of(SwiftKeystone2ObjectStorage.configBuilder()
@@ -140,6 +139,7 @@ class ObjectStorageBlobConfigurationTest {
                             .tenantName(TenantName.of("test"))
                             .build()),
                         Optional.empty()))
+                    .defaultBucketName(Optional.of(BucketName.of("foo")))
                     .build());
     }
 
@@ -162,7 +162,6 @@ class ObjectStorageBlobConfigurationTest {
                 ObjectStorageBlobConfiguration.builder()
                     .codec(PayloadCodecFactory.DEFAULT)
                     .provider(ObjectStorageProvider.SWIFT)
-                    .bucketName(BucketName.of("foo"))
                     .authConfiguration(new SwiftAuthConfiguration(SwiftKeystone3ObjectStorage.AUTH_API_NAME,
                         Optional.empty(),
                         Optional.empty(),
@@ -172,6 +171,7 @@ class ObjectStorageBlobConfigurationTest {
                             .project(Project.of(ProjectName.of("test")))
                             .identity(IdentityV3.of(DomainName.of("Default"), UserName.of("demo")))
                             .build())))
+                    .defaultBucketName(Optional.of(BucketName.of("foo")))
                     .build());
     }
 
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobStoreModuleTest.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobStoreModuleTest.java
index e27f990..22b9f8d 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobStoreModuleTest.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobStoreModuleTest.java
@@ -79,7 +79,6 @@ class ObjectStorageBlobStoreModuleTest {
             ObjectStorageBlobConfiguration tmpAuth = ObjectStorageBlobConfiguration.builder()
                 .codec(PayloadCodecFactory.DEFAULT)
                 .provider(ObjectStorageProvider.SWIFT)
-                .bucketName(generateBucketName())
                 .authConfiguration(new SwiftAuthConfiguration(SwiftTempAuthObjectStorage.AUTH_API_NAME,
                     Optional.of(SwiftTempAuthObjectStorage.configBuilder()
                         .endpoint(dockerSwift.swiftEndpoint())
@@ -91,11 +90,11 @@ class ObjectStorageBlobStoreModuleTest {
                         .build()),
                     Optional.empty(),
                     Optional.empty()))
+                .defaultBucketName(Optional.of(generateBucketName()))
                 .build();
             ObjectStorageBlobConfiguration keystone2 = ObjectStorageBlobConfiguration.builder()
                 .codec(PayloadCodecFactory.DEFAULT)
                 .provider(ObjectStorageProvider.SWIFT)
-                .bucketName(generateBucketName())
                 .authConfiguration(new SwiftAuthConfiguration(SwiftKeystone2ObjectStorage.AUTH_API_NAME,
                     Optional.empty(),
                     Optional.of(SwiftKeystone2ObjectStorage.configBuilder()
@@ -105,11 +104,11 @@ class ObjectStorageBlobStoreModuleTest {
                         .tenantName(TenantName.of("test"))
                         .build()),
                     Optional.empty()))
+                .defaultBucketName(Optional.of(generateBucketName()))
                 .build();
             ObjectStorageBlobConfiguration keystone3 = ObjectStorageBlobConfiguration.builder()
                 .codec(PayloadCodecFactory.DEFAULT)
                 .provider(ObjectStorageProvider.SWIFT)
-                .bucketName(generateBucketName())
                 .authConfiguration(new SwiftAuthConfiguration(SwiftKeystone3ObjectStorage.AUTH_API_NAME,
                     Optional.empty(),
                     Optional.empty(),
@@ -119,6 +118,7 @@ class ObjectStorageBlobStoreModuleTest {
                         .project(Project.of(ProjectName.of("test")))
                         .identity(IdentityV3.of(DomainName.of("Default"), UserName.of("demo")))
                         .build())))
+                .defaultBucketName(Optional.of(generateBucketName()))
                 .build();
             return Stream.of(tmpAuth, keystone2, keystone3).map(Arguments::of);
         }
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/SwiftObjectStorageTest.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/SwiftObjectStorageTest.java
index 12411c3..8e872f9 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/SwiftObjectStorageTest.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/SwiftObjectStorageTest.java
@@ -37,8 +37,8 @@ class SwiftObjectStorageTest {
         ObjectStorageBlobConfiguration objectStorageBlobConfiguration = ObjectStorageBlobConfiguration.builder()
             .codec(PayloadCodecFactory.DEFAULT)
             .provider(ObjectStorageProvider.SWIFT)
-            .bucketName(BucketName.of("myContainer"))
             .authConfiguration(new SwiftAuthConfiguration("tmpauth", Optional.empty(), Optional.empty(), Optional.empty()))
+            .defaultBucketName(Optional.of(BucketName.of("myBucket")))
             .build();
         assertThatThrownBy(() -> SwiftObjectStorage.builder(objectStorageBlobConfiguration))
             .isInstanceOf(IllegalArgumentException.class)
@@ -57,8 +57,8 @@ class SwiftObjectStorageTest {
         ObjectStorageBlobConfiguration objectStorageBlobConfiguration = ObjectStorageBlobConfiguration.builder()
             .codec(PayloadCodecFactory.DEFAULT)
             .provider(ObjectStorageProvider.SWIFT)
-            .bucketName(BucketName.of("myContainer"))
             .authConfiguration(SwiftAuthConfiguration.from(configuration))
+            .defaultBucketName(Optional.of(BucketName.of("myBucket")))
             .build();
         SwiftObjectStorage.builder(objectStorageBlobConfiguration);
     }
@@ -68,8 +68,8 @@ class SwiftObjectStorageTest {
         ObjectStorageBlobConfiguration objectStorageBlobConfiguration = ObjectStorageBlobConfiguration.builder()
             .codec(PayloadCodecFactory.DEFAULT)
             .provider(ObjectStorageProvider.SWIFT)
-            .bucketName(BucketName.of("myContainer"))
             .authConfiguration(new SwiftAuthConfiguration("keystone2", Optional.empty(), Optional.empty(), Optional.empty()))
+            .defaultBucketName(Optional.of(BucketName.of("myBucket")))
             .build();
         assertThatThrownBy(() -> SwiftObjectStorage.builder(objectStorageBlobConfiguration))
             .isInstanceOf(IllegalArgumentException.class)
@@ -88,8 +88,8 @@ class SwiftObjectStorageTest {
         ObjectStorageBlobConfiguration objectStorageBlobConfiguration = ObjectStorageBlobConfiguration.builder()
             .codec(PayloadCodecFactory.DEFAULT)
             .provider(ObjectStorageProvider.SWIFT)
-            .bucketName(BucketName.of("myContainer"))
             .authConfiguration(SwiftAuthConfiguration.from(configuration))
+            .defaultBucketName(Optional.of(BucketName.of("myBucket")))
             .build();
         SwiftObjectStorage.builder(objectStorageBlobConfiguration);
     }
@@ -99,8 +99,8 @@ class SwiftObjectStorageTest {
         ObjectStorageBlobConfiguration objectStorageBlobConfiguration = ObjectStorageBlobConfiguration.builder()
             .codec(PayloadCodecFactory.DEFAULT)
             .provider(ObjectStorageProvider.SWIFT)
-            .bucketName(BucketName.of("myContainer"))
             .authConfiguration(new SwiftAuthConfiguration("keystone3", Optional.empty(), Optional.empty(), Optional.empty()))
+            .defaultBucketName(Optional.of(BucketName.of("myBucket")))
             .build();
         assertThatThrownBy(() -> SwiftObjectStorage.builder(objectStorageBlobConfiguration))
             .isInstanceOf(IllegalArgumentException.class)
@@ -119,8 +119,8 @@ class SwiftObjectStorageTest {
         ObjectStorageBlobConfiguration objectStorageBlobConfiguration = ObjectStorageBlobConfiguration.builder()
             .codec(PayloadCodecFactory.DEFAULT)
             .provider(ObjectStorageProvider.SWIFT)
-            .bucketName(BucketName.of("myContainer"))
             .authConfiguration(SwiftAuthConfiguration.from(configuration))
+            .defaultBucketName(Optional.of(BucketName.of("myBucket")))
             .build();
         SwiftObjectStorage.builder(objectStorageBlobConfiguration);
     }


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


[james-project] 05/12: JAMES-2806 rename bucketName in ObjectStorageDAO to be more clear

Posted by bt...@apache.org.
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 e39ba7f5a3d869f124bddc0931118b570e015af2
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Wed Jun 26 16:04:18 2019 +0700

    JAMES-2806 rename bucketName in ObjectStorageDAO to be more clear
---
 .../blob/objectstorage/ObjectStorageBlobsDAO.java  | 25 +++++++++++++---------
 .../ObjectStorageBlobsDAOBuilder.java              | 18 ++++++++--------
 .../blob/objectstorage/aws/AwsS3ObjectStorage.java |  2 +-
 .../swift/SwiftKeystone2ObjectStorage.java         |  2 +-
 .../swift/SwiftKeystone3ObjectStorage.java         |  2 +-
 .../swift/SwiftTempAuthObjectStorage.java          |  2 +-
 .../blob/objectstorage/DockerAwsS3Singleton.java   |  2 +-
 .../blob/objectstorage/DockerSwiftSingleton.java   |  2 +-
 .../objectstorage/ObjectStorageBlobsDAOTest.java   |  6 +++---
 .../aws/AwsS3ObjectStorageBlobsDAOBuilderTest.java |  6 +++---
 ...tKeystone2ObjectStorageBlobsDAOBuilderTest.java |  6 +++---
 ...tKeystone3ObjectStorageBlobsDAOBuilderTest.java |  6 +++---
 ...ftTempAuthObjectStorageBlobsDAOBuilderTest.java |  6 +++---
 .../ObjectStorageDependenciesModule.java           |  6 +++---
 .../objectstorage/swift/SwiftObjectStorage.java    |  8 +++----
 .../swift/ObjectStorageBlobStoreModuleTest.java    |  2 +-
 16 files changed, 53 insertions(+), 48 deletions(-)

diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java
index 22e52db..0507935 100644
--- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java
+++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java
@@ -53,35 +53,35 @@ public class ObjectStorageBlobsDAO implements BlobStore {
 
     private final BlobId.Factory blobIdFactory;
 
-    private final BucketName bucketName;
+    private final BucketName defaultBucketName;
     private final org.jclouds.blobstore.BlobStore blobStore;
     private final PutBlobFunction putBlobFunction;
     private final PayloadCodec payloadCodec;
 
-    ObjectStorageBlobsDAO(BucketName bucketName, BlobId.Factory blobIdFactory,
+    ObjectStorageBlobsDAO(BucketName defaultBucketName, BlobId.Factory blobIdFactory,
                           org.jclouds.blobstore.BlobStore blobStore,
                           PutBlobFunction putBlobFunction,
                           PayloadCodec payloadCodec) {
         this.blobIdFactory = blobIdFactory;
-        this.bucketName = bucketName;
+        this.defaultBucketName = defaultBucketName;
         this.blobStore = blobStore;
         this.putBlobFunction = putBlobFunction;
         this.payloadCodec = payloadCodec;
     }
 
-    public static ObjectStorageBlobsDAOBuilder.RequireBucketName builder(SwiftTempAuthObjectStorage.Configuration testConfig) {
+    public static ObjectStorageBlobsDAOBuilder.RequireDefaultBucketName builder(SwiftTempAuthObjectStorage.Configuration testConfig) {
         return SwiftTempAuthObjectStorage.daoBuilder(testConfig);
     }
 
-    public static ObjectStorageBlobsDAOBuilder.RequireBucketName builder(SwiftKeystone2ObjectStorage.Configuration testConfig) {
+    public static ObjectStorageBlobsDAOBuilder.RequireDefaultBucketName builder(SwiftKeystone2ObjectStorage.Configuration testConfig) {
         return SwiftKeystone2ObjectStorage.daoBuilder(testConfig);
     }
 
-    public static ObjectStorageBlobsDAOBuilder.RequireBucketName builder(SwiftKeystone3ObjectStorage.Configuration testConfig) {
+    public static ObjectStorageBlobsDAOBuilder.RequireDefaultBucketName builder(SwiftKeystone3ObjectStorage.Configuration testConfig) {
         return SwiftKeystone3ObjectStorage.daoBuilder(testConfig);
     }
 
-    public static ObjectStorageBlobsDAOBuilder.RequireBucketName builder(AwsS3AuthConfiguration testConfig) {
+    public static ObjectStorageBlobsDAOBuilder.RequireDefaultBucketName builder(AwsS3AuthConfiguration testConfig) {
         return AwsS3ObjectStorage.daoBuilder(testConfig);
     }
 
@@ -117,7 +117,7 @@ public class ObjectStorageBlobsDAO implements BlobStore {
     }
 
     private Mono<BlobId> updateBlobId(BlobId from, BlobId to) {
-        String bucketName = this.bucketName.asString();
+        String bucketName = this.defaultBucketName.asString();
         return Mono
             .fromCallable(() -> blobStore.copyBlob(bucketName, from.asString(), bucketName, to.asString(), CopyOptions.NONE))
             .then(Mono.fromRunnable(() -> blobStore.removeBlob(bucketName, from.asString())))
@@ -146,7 +146,7 @@ public class ObjectStorageBlobsDAO implements BlobStore {
 
     @Override
     public InputStream read(BucketName bucketName, BlobId blobId) throws ObjectStoreException {
-        Blob blob = blobStore.getBlob(this.bucketName.asString(), blobId.asString());
+        Blob blob = blobStore.getBlob(this.defaultBucketName.asString(), blobId.asString());
 
         try {
             if (blob != null) {
@@ -166,8 +166,13 @@ public class ObjectStorageBlobsDAO implements BlobStore {
         throw new NotImplementedException("not implemented");
     }
 
+    @Override
+    public BucketName getDefaultBucketName() {
+        return defaultBucketName;
+    }
+
     public void deleteContainer() {
-        blobStore.deleteContainer(bucketName.asString());
+        blobStore.deleteContainer(defaultBucketName.asString());
     }
 
     public PayloadCodec getPayloadCodec() {
diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOBuilder.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOBuilder.java
index f890f0d..4b8d212 100644
--- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOBuilder.java
+++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOBuilder.java
@@ -31,13 +31,13 @@ import com.google.common.base.Preconditions;
 
 public class ObjectStorageBlobsDAOBuilder {
 
-    public static RequireBucketName forBlobStore(Supplier<BlobStore> supplier) {
+    public static RequireDefaultBucketName forBlobStore(Supplier<BlobStore> supplier) {
         return bucketName -> blobIdFactory -> new ReadyToBuild(supplier, blobIdFactory, bucketName);
     }
 
     @FunctionalInterface
-    public interface RequireBucketName {
-        RequireBlobIdFactory container(BucketName bucketName);
+    public interface RequireDefaultBucketName {
+        RequireBlobIdFactory defaultBucketName(BucketName bucketName);
     }
 
     @FunctionalInterface
@@ -48,14 +48,14 @@ public class ObjectStorageBlobsDAOBuilder {
     public static class ReadyToBuild {
 
         private final Supplier<BlobStore> supplier;
-        private final BucketName bucketName;
+        private final BucketName defaultBucketName;
         private final BlobId.Factory blobIdFactory;
         private Optional<PayloadCodec> payloadCodec;
         private Optional<PutBlobFunction> putBlob;
 
-        public ReadyToBuild(Supplier<BlobStore> supplier, BlobId.Factory blobIdFactory, BucketName bucketName) {
+        public ReadyToBuild(Supplier<BlobStore> supplier, BlobId.Factory blobIdFactory, BucketName defaultBucketName) {
             this.blobIdFactory = blobIdFactory;
-            this.bucketName = bucketName;
+            this.defaultBucketName = defaultBucketName;
             this.payloadCodec = Optional.empty();
             this.supplier = supplier;
             this.putBlob = Optional.empty();
@@ -77,12 +77,12 @@ public class ObjectStorageBlobsDAOBuilder {
         }
 
         public ObjectStorageBlobsDAO build() {
-            Preconditions.checkState(bucketName != null);
+            Preconditions.checkState(defaultBucketName != null);
             Preconditions.checkState(blobIdFactory != null);
 
             BlobStore blobStore = supplier.get();
 
-            return new ObjectStorageBlobsDAO(bucketName,
+            return new ObjectStorageBlobsDAO(defaultBucketName,
                 blobIdFactory,
                 blobStore,
                 putBlob.orElse(defaultPutBlob(blobStore)),
@@ -90,7 +90,7 @@ public class ObjectStorageBlobsDAOBuilder {
         }
 
         private PutBlobFunction defaultPutBlob(BlobStore blobStore) {
-            return (blob) -> blobStore.putBlob(bucketName.asString(), blob);
+            return (blob) -> blobStore.putBlob(defaultBucketName.asString(), blob);
         }
 
         @VisibleForTesting
diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorage.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorage.java
index 0d8ef20..257e40c 100644
--- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorage.java
+++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorage.java
@@ -89,7 +89,7 @@ public class AwsS3ObjectStorage {
         executorService.shutdownNow();
     }
 
-    public static ObjectStorageBlobsDAOBuilder.RequireBucketName daoBuilder(AwsS3AuthConfiguration configuration) {
+    public static ObjectStorageBlobsDAOBuilder.RequireDefaultBucketName daoBuilder(AwsS3AuthConfiguration configuration) {
         return ObjectStorageBlobsDAOBuilder.forBlobStore(new BlobStoreBuilder(configuration));
     }
 
diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone2ObjectStorage.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone2ObjectStorage.java
index 5756a29..1b46c3a 100644
--- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone2ObjectStorage.java
+++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone2ObjectStorage.java
@@ -43,7 +43,7 @@ public class SwiftKeystone2ObjectStorage {
     private static final Iterable<Module> JCLOUDS_MODULES =
         ImmutableSet.of(new SLF4JLoggingModule());
 
-    public static ObjectStorageBlobsDAOBuilder.RequireBucketName daoBuilder(Configuration testConfig) {
+    public static ObjectStorageBlobsDAOBuilder.RequireDefaultBucketName daoBuilder(Configuration testConfig) {
         return ObjectStorageBlobsDAOBuilder.forBlobStore(new BlobStoreBuilder(testConfig));
     }
 
diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone3ObjectStorage.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone3ObjectStorage.java
index c526a5d..5ca8cf3 100644
--- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone3ObjectStorage.java
+++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone3ObjectStorage.java
@@ -45,7 +45,7 @@ public class SwiftKeystone3ObjectStorage {
     private static final Iterable<Module> JCLOUDS_MODULES =
         ImmutableSet.of(new SLF4JLoggingModule());
 
-    public static ObjectStorageBlobsDAOBuilder.RequireBucketName daoBuilder(Configuration testConfig) {
+    public static ObjectStorageBlobsDAOBuilder.RequireDefaultBucketName daoBuilder(Configuration testConfig) {
         return ObjectStorageBlobsDAOBuilder.forBlobStore(new BlobStoreBuilder(testConfig));
     }
 
diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/swift/SwiftTempAuthObjectStorage.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/swift/SwiftTempAuthObjectStorage.java
index e55ee34..9481337 100644
--- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/swift/SwiftTempAuthObjectStorage.java
+++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/swift/SwiftTempAuthObjectStorage.java
@@ -44,7 +44,7 @@ public class SwiftTempAuthObjectStorage {
     private static final Iterable<Module> JCLOUDS_MODULES =
         ImmutableSet.of(new SLF4JLoggingModule());
 
-    public static ObjectStorageBlobsDAOBuilder.RequireBucketName daoBuilder(Configuration testConfig) {
+    public static ObjectStorageBlobsDAOBuilder.RequireDefaultBucketName daoBuilder(Configuration testConfig) {
         return ObjectStorageBlobsDAOBuilder.forBlobStore(new BlobStoreBuilder(testConfig));
     }
 
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/DockerAwsS3Singleton.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/DockerAwsS3Singleton.java
index 22fff45..c5aeb79 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/DockerAwsS3Singleton.java
+++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/DockerAwsS3Singleton.java
@@ -29,6 +29,6 @@ public class DockerAwsS3Singleton {
         singleton.start();
     }
 
-    // Cleanup will be performed by test container resource reaper
+    // Cleanup will be performed by test defaultBucketName resource reaper
 }
 
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/DockerSwiftSingleton.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/DockerSwiftSingleton.java
index 3137797..2c34972 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/DockerSwiftSingleton.java
+++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/DockerSwiftSingleton.java
@@ -27,5 +27,5 @@ public class DockerSwiftSingleton {
         singleton.start();
     }
 
-    // Cleanup will be performed by test container resource reaper
+    // Cleanup will be performed by test defaultBucketName resource reaper
 }
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOTest.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOTest.java
index 674a340..e4f83d1 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOTest.java
+++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOTest.java
@@ -87,7 +87,7 @@ public class ObjectStorageBlobsDAOTest implements MetricableBlobStoreContract {
         BlobId.Factory blobIdFactory = blobIdFactory();
         ObjectStorageBlobsDAOBuilder.ReadyToBuild daoBuilder = ObjectStorageBlobsDAO
             .builder(testConfig)
-            .container(bucketName)
+            .defaultBucketName(bucketName)
             .blobIdFactory(blobIdFactory);
         blobStore = daoBuilder.getSupplier().get();
         objectStorageBlobsDAO = daoBuilder.build();
@@ -137,7 +137,7 @@ public class ObjectStorageBlobsDAOTest implements MetricableBlobStoreContract {
     void supportsEncryptionWithCustomPayloadCodec() throws IOException {
         ObjectStorageBlobsDAO encryptedDao = ObjectStorageBlobsDAO
             .builder(testConfig)
-            .container(bucketName)
+            .defaultBucketName(bucketName)
             .blobIdFactory(blobIdFactory())
             .payloadCodec(new AESPayloadCodec(CRYPTO_CONFIG))
             .build();
@@ -153,7 +153,7 @@ public class ObjectStorageBlobsDAOTest implements MetricableBlobStoreContract {
     void encryptionWithCustomPayloadCodeCannotBeReadFromUnencryptedDAO() throws Exception {
         ObjectStorageBlobsDAO encryptedDao = ObjectStorageBlobsDAO
             .builder(testConfig)
-            .container(bucketName)
+            .defaultBucketName(bucketName)
             .blobIdFactory(blobIdFactory())
             .payloadCodec(new AESPayloadCodec(CRYPTO_CONFIG))
             .build();
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorageBlobsDAOBuilderTest.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorageBlobsDAOBuilderTest.java
index efd784d..3db7533 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorageBlobsDAOBuilderTest.java
+++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorageBlobsDAOBuilderTest.java
@@ -65,7 +65,7 @@ class AwsS3ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlobsDAOCont
     void bucketNameIsMandatoryToBuildBlobsDAO() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(configuration)
-            .container(null)
+            .defaultBucketName(null)
             .blobIdFactory(new HashBlobId.Factory());
 
         assertThatThrownBy(builder::build).isInstanceOf(IllegalStateException.class);
@@ -75,7 +75,7 @@ class AwsS3ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlobsDAOCont
     void blobIdFactoryIsMandatoryToBuildBlobsDAO() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(configuration)
-            .container(bucketName)
+            .defaultBucketName(bucketName)
             .blobIdFactory(null);
 
         assertThatThrownBy(builder::build).isInstanceOf(IllegalStateException.class);
@@ -85,7 +85,7 @@ class AwsS3ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlobsDAOCont
     void builtBlobsDAOCanStoreAndRetrieve() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(configuration)
-            .container(bucketName)
+            .defaultBucketName(bucketName)
             .blobIdFactory(new HashBlobId.Factory())
             .putBlob(awsS3ObjectStorage.putBlob(bucketName, configuration));
 
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone2ObjectStorageBlobsDAOBuilderTest.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone2ObjectStorageBlobsDAOBuilderTest.java
index b807a59..fd8f296 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone2ObjectStorageBlobsDAOBuilderTest.java
+++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone2ObjectStorageBlobsDAOBuilderTest.java
@@ -66,7 +66,7 @@ class SwiftKeystone2ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlo
     void bucketNameIsMandatoryToBuildBlobsDAO() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(testConfig)
-            .container(null)
+            .defaultBucketName(null)
             .blobIdFactory(new HashBlobId.Factory());
 
         assertThatThrownBy(builder::build).isInstanceOf(IllegalStateException.class);
@@ -76,7 +76,7 @@ class SwiftKeystone2ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlo
     void blobIdFactoryIsMandatoryToBuildBlobsDAO() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(testConfig)
-            .container(bucketName)
+            .defaultBucketName(bucketName)
             .blobIdFactory(null);
 
         assertThatThrownBy(builder::build).isInstanceOf(IllegalStateException.class);
@@ -86,7 +86,7 @@ class SwiftKeystone2ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlo
     void builtBlobsDAOCanStoreAndRetrieve() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(testConfig)
-            .container(bucketName)
+            .defaultBucketName(bucketName)
             .blobIdFactory(new HashBlobId.Factory());
 
         assertBlobsDAOCanStoreAndRetrieve(builder);
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone3ObjectStorageBlobsDAOBuilderTest.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone3ObjectStorageBlobsDAOBuilderTest.java
index d9e0576..16ac758 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone3ObjectStorageBlobsDAOBuilderTest.java
+++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone3ObjectStorageBlobsDAOBuilderTest.java
@@ -99,7 +99,7 @@ class SwiftKeystone3ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlo
     void bucketNameIsMandatoryToBuildBlobsDAO() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(testConfig)
-            .container(null)
+            .defaultBucketName(null)
             .blobIdFactory(new HashBlobId.Factory());
 
         assertThatThrownBy(builder::build).isInstanceOf(IllegalStateException.class);
@@ -109,7 +109,7 @@ class SwiftKeystone3ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlo
     void blobIdFactoryIsMandatoryToBuildBlobsDAO() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(testConfig)
-            .container(bucketName)
+            .defaultBucketName(bucketName)
             .blobIdFactory(null);
 
         assertThatThrownBy(builder::build).isInstanceOf(IllegalStateException.class);
@@ -122,7 +122,7 @@ class SwiftKeystone3ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlo
             configBuilders.get(key).endpoint(dockerSwift.keystoneV3Endpoint()).build();
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(config)
-            .container(bucketName)
+            .defaultBucketName(bucketName)
             .blobIdFactory(new HashBlobId.Factory());
 
         assertBlobsDAOCanStoreAndRetrieve(builder);
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftTempAuthObjectStorageBlobsDAOBuilderTest.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftTempAuthObjectStorageBlobsDAOBuilderTest.java
index 662211b..8ecf795 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftTempAuthObjectStorageBlobsDAOBuilderTest.java
+++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftTempAuthObjectStorageBlobsDAOBuilderTest.java
@@ -68,7 +68,7 @@ class SwiftTempAuthObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlob
     void bucketNameIsMandatoryToBuildBlobsDAO() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(testConfig)
-            .container(null)
+            .defaultBucketName(null)
             .blobIdFactory(new HashBlobId.Factory());
 
         assertThatThrownBy(builder::build).isInstanceOf(IllegalStateException.class);
@@ -78,7 +78,7 @@ class SwiftTempAuthObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlob
     void blobIdFactoryIsMandatoryToBuildBlobsDAO() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(testConfig)
-            .container(bucketName)
+            .defaultBucketName(bucketName)
             .blobIdFactory(null);
 
         assertThatThrownBy(builder::build).isInstanceOf(IllegalStateException.class);
@@ -88,7 +88,7 @@ class SwiftTempAuthObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlob
     void builtBlobsDAOCanStoreAndRetrieve() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(testConfig)
-            .container(bucketName)
+            .defaultBucketName(bucketName)
             .blobIdFactory(new HashBlobId.Factory());
 
         assertBlobsDAOCanStoreAndRetrieve(builder);
diff --git a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageDependenciesModule.java b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageDependenciesModule.java
index 7f11da9..34ce338 100644
--- a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageDependenciesModule.java
+++ b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/ObjectStorageDependenciesModule.java
@@ -67,16 +67,16 @@ public class ObjectStorageDependenciesModule extends AbstractModule {
     @Singleton
     private ObjectStorageBlobsDAO buildObjectStore(ObjectStorageBlobConfiguration configuration, BlobId.Factory blobIdFactory, Provider<AwsS3ObjectStorage> awsS3ObjectStorageProvider) throws InterruptedException, ExecutionException, TimeoutException {
         ObjectStorageBlobsDAO dao = selectDaoBuilder(configuration)
-            .container(configuration.getNamespace())
+            .defaultBucketName(configuration.getNamespace())
             .blobIdFactory(blobIdFactory)
             .payloadCodec(configuration.getPayloadCodec())
             .putBlob(putBlob(blobIdFactory, configuration, awsS3ObjectStorageProvider))
             .build();
-        dao.createContainer(configuration.getNamespace()).block(Duration.ofMinutes(1));
+        dao.createContainer(dao.getDefaultBucketName()).block(Duration.ofMinutes(1));
         return dao;
     }
 
-    private ObjectStorageBlobsDAOBuilder.RequireBucketName selectDaoBuilder(ObjectStorageBlobConfiguration configuration) {
+    private ObjectStorageBlobsDAOBuilder.RequireDefaultBucketName selectDaoBuilder(ObjectStorageBlobConfiguration configuration) {
         switch (configuration.getProvider()) {
             case SWIFT:
                 return SwiftObjectStorage.builder(configuration);
diff --git a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/swift/SwiftObjectStorage.java b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/swift/SwiftObjectStorage.java
index 6cc6a44..795d66f 100644
--- a/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/swift/SwiftObjectStorage.java
+++ b/server/container/guice/blob-objectstorage-guice/src/main/java/org/apache/james/modules/objectstorage/swift/SwiftObjectStorage.java
@@ -29,7 +29,7 @@ import org.apache.james.modules.objectstorage.ObjectStorageProvider;
 
 public class SwiftObjectStorage {
 
-    public static ObjectStorageBlobsDAOBuilder.RequireBucketName builder(ObjectStorageBlobConfiguration configuration) {
+    public static ObjectStorageBlobsDAOBuilder.RequireDefaultBucketName builder(ObjectStorageBlobConfiguration configuration) {
         if (configuration.getProvider() != ObjectStorageProvider.SWIFT) {
             throw new IllegalArgumentException("unknown provider " + configuration.getProvider());
         }
@@ -52,15 +52,15 @@ public class SwiftObjectStorage {
         }
     }
 
-    public static ObjectStorageBlobsDAOBuilder.RequireBucketName builder(SwiftTempAuthObjectStorage.Configuration testConfig) {
+    public static ObjectStorageBlobsDAOBuilder.RequireDefaultBucketName builder(SwiftTempAuthObjectStorage.Configuration testConfig) {
         return SwiftTempAuthObjectStorage.daoBuilder(testConfig);
     }
 
-    public static ObjectStorageBlobsDAOBuilder.RequireBucketName builder(SwiftKeystone2ObjectStorage.Configuration testConfig) {
+    public static ObjectStorageBlobsDAOBuilder.RequireDefaultBucketName builder(SwiftKeystone2ObjectStorage.Configuration testConfig) {
         return SwiftKeystone2ObjectStorage.daoBuilder(testConfig);
     }
 
-    public static ObjectStorageBlobsDAOBuilder.RequireBucketName builder(SwiftKeystone3ObjectStorage.Configuration testConfig) {
+    public static ObjectStorageBlobsDAOBuilder.RequireDefaultBucketName builder(SwiftKeystone3ObjectStorage.Configuration testConfig) {
         return SwiftKeystone3ObjectStorage.daoBuilder(testConfig);
     }
 }
diff --git a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobStoreModuleTest.java b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobStoreModuleTest.java
index 503b3d1..476c6d5 100644
--- a/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobStoreModuleTest.java
+++ b/server/container/guice/blob-objectstorage-guice/src/test/java/org/apache/james/modules/objectstorage/swift/ObjectStorageBlobStoreModuleTest.java
@@ -137,7 +137,7 @@ class ObjectStorageBlobStoreModuleTest {
                 .with(binder -> binder.bind(ObjectStorageBlobConfiguration.class).toInstance(configuration)));
 
         ObjectStorageBlobsDAO dao = injector.getInstance(ObjectStorageBlobsDAO.class);
-        dao.createContainer(configuration.getNamespace()).block();
+        dao.createContainer(dao.getDefaultBucketName()).block();
 
         BlobStore blobStore = injector.getInstance(Key.get(BlobStore.class, Names.named(MetricableBlobStore.BLOB_STORE_IMPLEMENTATION)));
 


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


[james-project] 01/12: JAMES-2806 Replace ContainerName by BucketName in ObjectStorage

Posted by bt...@apache.org.
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 d9b23f5718bcf5a8af2e0113ba3abac66cf991b8
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Tue Jun 25 15:23:28 2019 +0700

    JAMES-2806 Replace ContainerName by BucketName in ObjectStorage
    
    because they represent for the same concept
---
 .../james/blob/objectstorage/ContainerName.java    | 63 ----------------------
 .../blob/objectstorage/ObjectStorageBlobsDAO.java  | 28 +++++-----
 .../ObjectStorageBlobsDAOBuilder.java              | 21 ++++----
 .../blob/objectstorage/aws/AwsS3ObjectStorage.java | 18 +++----
 .../swift/SwiftKeystone2ObjectStorage.java         |  2 +-
 .../swift/SwiftKeystone3ObjectStorage.java         |  2 +-
 .../swift/SwiftTempAuthObjectStorage.java          |  2 +-
 .../blob/objectstorage/ContainerNameTest.java      | 31 -----------
 .../ObjectStorageBlobsDAOContract.java             |  4 +-
 .../objectstorage/ObjectStorageBlobsDAOTest.java   | 28 +++++-----
 .../aws/AwsS3ObjectStorageBlobsDAOBuilderTest.java | 18 +++----
 ...tKeystone2ObjectStorageBlobsDAOBuilderTest.java | 16 +++---
 ...tKeystone3ObjectStorageBlobsDAOBuilderTest.java | 16 +++---
 ...ftTempAuthObjectStorageBlobsDAOBuilderTest.java | 16 +++---
 14 files changed, 86 insertions(+), 179 deletions(-)

diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ContainerName.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ContainerName.java
deleted file mode 100644
index 5c3c05d..0000000
--- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ContainerName.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-
-package org.apache.james.blob.objectstorage;
-
-import com.google.common.base.MoreObjects;
-import com.google.common.base.Objects;
-
-public final class ContainerName {
-    public static ContainerName of(String value) {
-        return new ContainerName(value);
-    }
-
-    private final String container;
-
-    private ContainerName(String value) {
-        this.container = value;
-    }
-
-    public String value() {
-        return container;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) {
-            return true;
-        }
-        if (o == null || getClass() != o.getClass()) {
-            return false;
-        }
-        ContainerName that = (ContainerName) o;
-        return Objects.equal(container, that.container);
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hashCode(container);
-    }
-
-    @Override
-    public String toString() {
-        return MoreObjects.toStringHelper(this)
-            .add("container", container)
-            .toString();
-    }
-}
diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java
index aa209b5..22e52db 100644
--- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java
+++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAO.java
@@ -53,40 +53,40 @@ public class ObjectStorageBlobsDAO implements BlobStore {
 
     private final BlobId.Factory blobIdFactory;
 
-    private final ContainerName containerName;
+    private final BucketName bucketName;
     private final org.jclouds.blobstore.BlobStore blobStore;
     private final PutBlobFunction putBlobFunction;
     private final PayloadCodec payloadCodec;
 
-    ObjectStorageBlobsDAO(ContainerName containerName, BlobId.Factory blobIdFactory,
+    ObjectStorageBlobsDAO(BucketName bucketName, BlobId.Factory blobIdFactory,
                           org.jclouds.blobstore.BlobStore blobStore,
                           PutBlobFunction putBlobFunction,
                           PayloadCodec payloadCodec) {
         this.blobIdFactory = blobIdFactory;
-        this.containerName = containerName;
+        this.bucketName = bucketName;
         this.blobStore = blobStore;
         this.putBlobFunction = putBlobFunction;
         this.payloadCodec = payloadCodec;
     }
 
-    public static ObjectStorageBlobsDAOBuilder.RequireContainerName builder(SwiftTempAuthObjectStorage.Configuration testConfig) {
+    public static ObjectStorageBlobsDAOBuilder.RequireBucketName builder(SwiftTempAuthObjectStorage.Configuration testConfig) {
         return SwiftTempAuthObjectStorage.daoBuilder(testConfig);
     }
 
-    public static ObjectStorageBlobsDAOBuilder.RequireContainerName builder(SwiftKeystone2ObjectStorage.Configuration testConfig) {
+    public static ObjectStorageBlobsDAOBuilder.RequireBucketName builder(SwiftKeystone2ObjectStorage.Configuration testConfig) {
         return SwiftKeystone2ObjectStorage.daoBuilder(testConfig);
     }
 
-    public static ObjectStorageBlobsDAOBuilder.RequireContainerName builder(SwiftKeystone3ObjectStorage.Configuration testConfig) {
+    public static ObjectStorageBlobsDAOBuilder.RequireBucketName builder(SwiftKeystone3ObjectStorage.Configuration testConfig) {
         return SwiftKeystone3ObjectStorage.daoBuilder(testConfig);
     }
 
-    public static ObjectStorageBlobsDAOBuilder.RequireContainerName builder(AwsS3AuthConfiguration testConfig) {
+    public static ObjectStorageBlobsDAOBuilder.RequireBucketName builder(AwsS3AuthConfiguration testConfig) {
         return AwsS3ObjectStorage.daoBuilder(testConfig);
     }
 
-    public Mono<ContainerName> createContainer(ContainerName name) {
-        return Mono.fromCallable(() -> blobStore.createContainerInLocation(DEFAULT_LOCATION, name.value()))
+    public Mono<BucketName> createContainer(BucketName name) {
+        return Mono.fromCallable(() -> blobStore.createContainerInLocation(DEFAULT_LOCATION, name.asString()))
             .filter(created -> created == false)
             .doOnNext(ignored -> LOGGER.debug("{} already existed", name))
             .thenReturn(name);
@@ -117,10 +117,10 @@ public class ObjectStorageBlobsDAO implements BlobStore {
     }
 
     private Mono<BlobId> updateBlobId(BlobId from, BlobId to) {
-        String containerName = this.containerName.value();
+        String bucketName = this.bucketName.asString();
         return Mono
-            .fromCallable(() -> blobStore.copyBlob(containerName, from.asString(), containerName, to.asString(), CopyOptions.NONE))
-            .then(Mono.fromRunnable(() -> blobStore.removeBlob(containerName, from.asString())))
+            .fromCallable(() -> blobStore.copyBlob(bucketName, from.asString(), bucketName, to.asString(), CopyOptions.NONE))
+            .then(Mono.fromRunnable(() -> blobStore.removeBlob(bucketName, from.asString())))
             .thenReturn(to);
     }
 
@@ -146,7 +146,7 @@ public class ObjectStorageBlobsDAO implements BlobStore {
 
     @Override
     public InputStream read(BucketName bucketName, BlobId blobId) throws ObjectStoreException {
-        Blob blob = blobStore.getBlob(containerName.value(), blobId.asString());
+        Blob blob = blobStore.getBlob(this.bucketName.asString(), blobId.asString());
 
         try {
             if (blob != null) {
@@ -167,7 +167,7 @@ public class ObjectStorageBlobsDAO implements BlobStore {
     }
 
     public void deleteContainer() {
-        blobStore.deleteContainer(containerName.value());
+        blobStore.deleteContainer(bucketName.asString());
     }
 
     public PayloadCodec getPayloadCodec() {
diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOBuilder.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOBuilder.java
index f6aa7ff..f890f0d 100644
--- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOBuilder.java
+++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOBuilder.java
@@ -23,6 +23,7 @@ import java.util.Optional;
 import java.util.function.Supplier;
 
 import org.apache.james.blob.api.BlobId;
+import org.apache.james.blob.api.BucketName;
 import org.jclouds.blobstore.BlobStore;
 
 import com.google.common.annotations.VisibleForTesting;
@@ -30,13 +31,13 @@ import com.google.common.base.Preconditions;
 
 public class ObjectStorageBlobsDAOBuilder {
 
-    public static RequireContainerName forBlobStore(Supplier<BlobStore> supplier) {
-        return containerName -> blobIdFactory -> new ReadyToBuild(supplier, blobIdFactory, containerName);
+    public static RequireBucketName forBlobStore(Supplier<BlobStore> supplier) {
+        return bucketName -> blobIdFactory -> new ReadyToBuild(supplier, blobIdFactory, bucketName);
     }
 
     @FunctionalInterface
-    public interface RequireContainerName {
-        RequireBlobIdFactory container(ContainerName containerName);
+    public interface RequireBucketName {
+        RequireBlobIdFactory container(BucketName bucketName);
     }
 
     @FunctionalInterface
@@ -47,14 +48,14 @@ public class ObjectStorageBlobsDAOBuilder {
     public static class ReadyToBuild {
 
         private final Supplier<BlobStore> supplier;
-        private final ContainerName containerName;
+        private final BucketName bucketName;
         private final BlobId.Factory blobIdFactory;
         private Optional<PayloadCodec> payloadCodec;
         private Optional<PutBlobFunction> putBlob;
 
-        public ReadyToBuild(Supplier<BlobStore> supplier, BlobId.Factory blobIdFactory, ContainerName containerName) {
+        public ReadyToBuild(Supplier<BlobStore> supplier, BlobId.Factory blobIdFactory, BucketName bucketName) {
             this.blobIdFactory = blobIdFactory;
-            this.containerName = containerName;
+            this.bucketName = bucketName;
             this.payloadCodec = Optional.empty();
             this.supplier = supplier;
             this.putBlob = Optional.empty();
@@ -76,12 +77,12 @@ public class ObjectStorageBlobsDAOBuilder {
         }
 
         public ObjectStorageBlobsDAO build() {
-            Preconditions.checkState(containerName != null);
+            Preconditions.checkState(bucketName != null);
             Preconditions.checkState(blobIdFactory != null);
 
             BlobStore blobStore = supplier.get();
 
-            return new ObjectStorageBlobsDAO(containerName,
+            return new ObjectStorageBlobsDAO(bucketName,
                 blobIdFactory,
                 blobStore,
                 putBlob.orElse(defaultPutBlob(blobStore)),
@@ -89,7 +90,7 @@ public class ObjectStorageBlobsDAOBuilder {
         }
 
         private PutBlobFunction defaultPutBlob(BlobStore blobStore) {
-            return (blob) -> blobStore.putBlob(containerName.value(), blob);
+            return (blob) -> blobStore.putBlob(bucketName.asString(), blob);
         }
 
         @VisibleForTesting
diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorage.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorage.java
index 5454af0..0d8ef20 100644
--- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorage.java
+++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorage.java
@@ -32,7 +32,7 @@ import javax.annotation.PreDestroy;
 import javax.inject.Inject;
 
 import org.apache.commons.io.FileUtils;
-import org.apache.james.blob.objectstorage.ContainerName;
+import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.objectstorage.ObjectStorageBlobsDAOBuilder;
 import org.apache.james.blob.objectstorage.PutBlobFunction;
 import org.apache.james.util.Size;
@@ -89,17 +89,17 @@ public class AwsS3ObjectStorage {
         executorService.shutdownNow();
     }
 
-    public static ObjectStorageBlobsDAOBuilder.RequireContainerName daoBuilder(AwsS3AuthConfiguration configuration) {
+    public static ObjectStorageBlobsDAOBuilder.RequireBucketName daoBuilder(AwsS3AuthConfiguration configuration) {
         return ObjectStorageBlobsDAOBuilder.forBlobStore(new BlobStoreBuilder(configuration));
     }
 
-    public Optional<PutBlobFunction> putBlob(ContainerName containerName, AwsS3AuthConfiguration configuration) {
+    public Optional<PutBlobFunction> putBlob(BucketName bucketName, AwsS3AuthConfiguration configuration) {
         return Optional.of((blob) -> {
             File file = null;
             try {
                 file = File.createTempFile(UUID.randomUUID().toString(), ".tmp");
                 FileUtils.copyToFile(blob.getPayload().openStream(), file);
-                putWithRetry(containerName, configuration, blob, file, FIRST_TRY);
+                putWithRetry(bucketName, configuration, blob, file, FIRST_TRY);
             } catch (IOException e) {
                 throw new RuntimeException(e);
             } finally {
@@ -110,21 +110,21 @@ public class AwsS3ObjectStorage {
         });
     }
 
-    private void putWithRetry(ContainerName containerName, AwsS3AuthConfiguration configuration, Blob blob, File file, int tried) {
+    private void putWithRetry(BucketName bucketName, AwsS3AuthConfiguration configuration, Blob blob, File file, int tried) {
         try {
-            put(containerName, configuration, blob, file);
+            put(bucketName, configuration, blob, file);
         } catch (RuntimeException e) {
             if (tried < MAX_RETRY_ON_EXCEPTION) {
-                putWithRetry(containerName, configuration, blob, file, tried + 1);
+                putWithRetry(bucketName, configuration, blob, file, tried + 1);
             } else {
                 throw e;
             }
         }
     }
 
-    private void put(ContainerName containerName, AwsS3AuthConfiguration configuration, Blob blob, File file) {
+    private void put(BucketName bucketName, AwsS3AuthConfiguration configuration, Blob blob, File file) {
         try {
-            PutObjectRequest request = new PutObjectRequest(containerName.value(),
+            PutObjectRequest request = new PutObjectRequest(bucketName.asString(),
                 blob.getMetadata().getName(),
                 file);
 
diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone2ObjectStorage.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone2ObjectStorage.java
index 7269aef..5756a29 100644
--- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone2ObjectStorage.java
+++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone2ObjectStorage.java
@@ -43,7 +43,7 @@ public class SwiftKeystone2ObjectStorage {
     private static final Iterable<Module> JCLOUDS_MODULES =
         ImmutableSet.of(new SLF4JLoggingModule());
 
-    public static ObjectStorageBlobsDAOBuilder.RequireContainerName daoBuilder(Configuration testConfig) {
+    public static ObjectStorageBlobsDAOBuilder.RequireBucketName daoBuilder(Configuration testConfig) {
         return ObjectStorageBlobsDAOBuilder.forBlobStore(new BlobStoreBuilder(testConfig));
     }
 
diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone3ObjectStorage.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone3ObjectStorage.java
index 276629e..c526a5d 100644
--- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone3ObjectStorage.java
+++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone3ObjectStorage.java
@@ -45,7 +45,7 @@ public class SwiftKeystone3ObjectStorage {
     private static final Iterable<Module> JCLOUDS_MODULES =
         ImmutableSet.of(new SLF4JLoggingModule());
 
-    public static ObjectStorageBlobsDAOBuilder.RequireContainerName daoBuilder(Configuration testConfig) {
+    public static ObjectStorageBlobsDAOBuilder.RequireBucketName daoBuilder(Configuration testConfig) {
         return ObjectStorageBlobsDAOBuilder.forBlobStore(new BlobStoreBuilder(testConfig));
     }
 
diff --git a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/swift/SwiftTempAuthObjectStorage.java b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/swift/SwiftTempAuthObjectStorage.java
index 747e983..e55ee34 100644
--- a/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/swift/SwiftTempAuthObjectStorage.java
+++ b/server/blob/blob-objectstorage/src/main/java/org/apache/james/blob/objectstorage/swift/SwiftTempAuthObjectStorage.java
@@ -44,7 +44,7 @@ public class SwiftTempAuthObjectStorage {
     private static final Iterable<Module> JCLOUDS_MODULES =
         ImmutableSet.of(new SLF4JLoggingModule());
 
-    public static ObjectStorageBlobsDAOBuilder.RequireContainerName daoBuilder(Configuration testConfig) {
+    public static ObjectStorageBlobsDAOBuilder.RequireBucketName daoBuilder(Configuration testConfig) {
         return ObjectStorageBlobsDAOBuilder.forBlobStore(new BlobStoreBuilder(testConfig));
     }
 
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ContainerNameTest.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ContainerNameTest.java
deleted file mode 100644
index 2043537..0000000
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ContainerNameTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-
-package org.apache.james.blob.objectstorage;
-
-import org.junit.jupiter.api.Test;
-
-import nl.jqno.equalsverifier.EqualsVerifier;
-
-class ContainerNameTest {
-    @Test
-    public void credentialsShouldRespectBeanContract() {
-        EqualsVerifier.forClass(ContainerName.class).verify();
-    }
-}
\ No newline at end of file
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOContract.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOContract.java
index 8f7e868..883416f 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOContract.java
+++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOContract.java
@@ -33,11 +33,11 @@ public interface ObjectStorageBlobsDAOContract {
 
     String CONTENT = "content";
 
-    ContainerName containerName();
+    BucketName bucketName();
 
     default void assertBlobsDAOCanStoreAndRetrieve(ObjectStorageBlobsDAOBuilder.ReadyToBuild builder) {
         ObjectStorageBlobsDAO dao = builder.build();
-        dao.createContainer(containerName()).block();
+        dao.createContainer(bucketName()).block();
 
         BlobId blobId = dao.save(BucketName.DEFAULT, CONTENT).block();
 
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOTest.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOTest.java
index 1164af5..674a340 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOTest.java
+++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/ObjectStorageBlobsDAOTest.java
@@ -68,7 +68,7 @@ public class ObjectStorageBlobsDAOTest implements MetricableBlobStoreContract {
         .password(PASSWORD.value().toCharArray())
         .build();
 
-    private ContainerName containerName;
+    private BucketName bucketName;
     private org.jclouds.blobstore.BlobStore blobStore;
     private SwiftTempAuthObjectStorage.Configuration testConfig;
     private ObjectStorageBlobsDAO objectStorageBlobsDAO;
@@ -76,7 +76,7 @@ public class ObjectStorageBlobsDAOTest implements MetricableBlobStoreContract {
 
     @BeforeEach
     void setUp(DockerSwift dockerSwift) {
-        containerName = ContainerName.of(UUID.randomUUID().toString());
+        bucketName = BucketName.of(UUID.randomUUID().toString());
         testConfig = SwiftTempAuthObjectStorage.configBuilder()
             .endpoint(dockerSwift.swiftEndpoint())
             .identity(SWIFT_IDENTITY)
@@ -87,17 +87,17 @@ public class ObjectStorageBlobsDAOTest implements MetricableBlobStoreContract {
         BlobId.Factory blobIdFactory = blobIdFactory();
         ObjectStorageBlobsDAOBuilder.ReadyToBuild daoBuilder = ObjectStorageBlobsDAO
             .builder(testConfig)
-            .container(containerName)
+            .container(bucketName)
             .blobIdFactory(blobIdFactory);
         blobStore = daoBuilder.getSupplier().get();
         objectStorageBlobsDAO = daoBuilder.build();
-        objectStorageBlobsDAO.createContainer(containerName).block();
+        objectStorageBlobsDAO.createContainer(bucketName).block();
         testee = new MetricableBlobStore(metricsTestExtension.getMetricFactory(), objectStorageBlobsDAO);
     }
 
     @AfterEach
     void tearDown() {
-        blobStore.deleteContainer(containerName.value());
+        blobStore.deleteContainer(bucketName.asString());
         blobStore.getContext().close();
     }
 
@@ -119,17 +119,17 @@ public class ObjectStorageBlobsDAOTest implements MetricableBlobStoreContract {
 
     @Test
     void createContainerShouldMakeTheContainerToExist() {
-        ContainerName containerName = ContainerName.of(UUID.randomUUID().toString());
-        objectStorageBlobsDAO.createContainer(containerName).block();
-        assertThat(blobStore.containerExists(containerName.value())).isTrue();
+        BucketName bucketName = BucketName.of(UUID.randomUUID().toString());
+        objectStorageBlobsDAO.createContainer(bucketName).block();
+        assertThat(blobStore.containerExists(bucketName.asString())).isTrue();
     }
 
     @Test
     void createContainerShouldNotFailWithRuntimeExceptionWhenCreateContainerTwice() {
-        ContainerName containerName = ContainerName.of(UUID.randomUUID().toString());
+        BucketName bucketName = BucketName.of(UUID.randomUUID().toString());
 
-        objectStorageBlobsDAO.createContainer(containerName).block();
-        assertThatCode(() -> objectStorageBlobsDAO.createContainer(containerName).block())
+        objectStorageBlobsDAO.createContainer(bucketName).block();
+        assertThatCode(() -> objectStorageBlobsDAO.createContainer(bucketName).block())
             .doesNotThrowAnyException();
     }
 
@@ -137,7 +137,7 @@ public class ObjectStorageBlobsDAOTest implements MetricableBlobStoreContract {
     void supportsEncryptionWithCustomPayloadCodec() throws IOException {
         ObjectStorageBlobsDAO encryptedDao = ObjectStorageBlobsDAO
             .builder(testConfig)
-            .container(containerName)
+            .container(bucketName)
             .blobIdFactory(blobIdFactory())
             .payloadCodec(new AESPayloadCodec(CRYPTO_CONFIG))
             .build();
@@ -153,7 +153,7 @@ public class ObjectStorageBlobsDAOTest implements MetricableBlobStoreContract {
     void encryptionWithCustomPayloadCodeCannotBeReadFromUnencryptedDAO() throws Exception {
         ObjectStorageBlobsDAO encryptedDao = ObjectStorageBlobsDAO
             .builder(testConfig)
-            .container(containerName)
+            .container(bucketName)
             .blobIdFactory(blobIdFactory())
             .payloadCodec(new AESPayloadCodec(CRYPTO_CONFIG))
             .build();
@@ -173,7 +173,7 @@ public class ObjectStorageBlobsDAOTest implements MetricableBlobStoreContract {
     @Test
     void deleteContainerShouldDeleteSwiftContainer() {
         objectStorageBlobsDAO.deleteContainer();
-        assertThat(blobStore.containerExists(containerName.value()))
+        assertThat(blobStore.containerExists(bucketName.asString()))
             .isFalse();
     }
 
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorageBlobsDAOBuilderTest.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorageBlobsDAOBuilderTest.java
index 3e71477..efd784d 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorageBlobsDAOBuilderTest.java
+++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/aws/AwsS3ObjectStorageBlobsDAOBuilderTest.java
@@ -23,8 +23,8 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
 import java.util.UUID;
 
+import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.api.HashBlobId;
-import org.apache.james.blob.objectstorage.ContainerName;
 import org.apache.james.blob.objectstorage.ObjectStorageBlobsDAO;
 import org.apache.james.blob.objectstorage.ObjectStorageBlobsDAOBuilder;
 import org.apache.james.blob.objectstorage.ObjectStorageBlobsDAOContract;
@@ -36,14 +36,14 @@ import org.junit.jupiter.api.extension.ExtendWith;
 @ExtendWith(DockerAwsS3Extension.class)
 class AwsS3ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlobsDAOContract {
 
-    private ContainerName containerName;
+    private BucketName bucketName;
     private AwsS3AuthConfiguration configuration;
     private AwsS3ObjectStorage awsS3ObjectStorage;
 
     @BeforeEach
     void setUp(DockerAwsS3Container dockerAwsS3Container) {
         awsS3ObjectStorage = new AwsS3ObjectStorage();
-        containerName = ContainerName.of(UUID.randomUUID().toString());
+        bucketName = BucketName.of(UUID.randomUUID().toString());
         configuration = AwsS3AuthConfiguration.builder()
             .endpoint(dockerAwsS3Container.getEndpoint())
             .accessKeyId(DockerAwsS3Container.ACCESS_KEY_ID)
@@ -57,12 +57,12 @@ class AwsS3ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlobsDAOCont
     }
 
     @Override
-    public ContainerName containerName() {
-        return containerName;
+    public BucketName bucketName() {
+        return bucketName;
     }
 
     @Test
-    void containerNameIsMandatoryToBuildBlobsDAO() {
+    void bucketNameIsMandatoryToBuildBlobsDAO() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(configuration)
             .container(null)
@@ -75,7 +75,7 @@ class AwsS3ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlobsDAOCont
     void blobIdFactoryIsMandatoryToBuildBlobsDAO() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(configuration)
-            .container(containerName)
+            .container(bucketName)
             .blobIdFactory(null);
 
         assertThatThrownBy(builder::build).isInstanceOf(IllegalStateException.class);
@@ -85,9 +85,9 @@ class AwsS3ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlobsDAOCont
     void builtBlobsDAOCanStoreAndRetrieve() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(configuration)
-            .container(containerName)
+            .container(bucketName)
             .blobIdFactory(new HashBlobId.Factory())
-            .putBlob(awsS3ObjectStorage.putBlob(containerName, configuration));
+            .putBlob(awsS3ObjectStorage.putBlob(bucketName, configuration));
 
         assertBlobsDAOCanStoreAndRetrieve(builder);
     }
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone2ObjectStorageBlobsDAOBuilderTest.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone2ObjectStorageBlobsDAOBuilderTest.java
index 0be2cb1..b807a59 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone2ObjectStorageBlobsDAOBuilderTest.java
+++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone2ObjectStorageBlobsDAOBuilderTest.java
@@ -24,8 +24,8 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import java.net.URI;
 import java.util.UUID;
 
+import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.api.HashBlobId;
-import org.apache.james.blob.objectstorage.ContainerName;
 import org.apache.james.blob.objectstorage.DockerSwift;
 import org.apache.james.blob.objectstorage.DockerSwiftExtension;
 import org.apache.james.blob.objectstorage.ObjectStorageBlobsDAO;
@@ -42,13 +42,13 @@ class SwiftKeystone2ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlo
     private static final UserName USER_NAME = UserName.of("demo");
     private static final Credentials PASSWORD = Credentials.of("demo");
     private static final Identity SWIFT_IDENTITY = Identity.of(TENANT_NAME, USER_NAME);
-    private ContainerName containerName;
+    private BucketName bucketName;
     private URI endpoint;
     private SwiftKeystone2ObjectStorage.Configuration testConfig;
 
     @BeforeEach
     void setUp(DockerSwift dockerSwift) {
-        containerName = ContainerName.of(UUID.randomUUID().toString());
+        bucketName = BucketName.of(UUID.randomUUID().toString());
         endpoint = dockerSwift.keystoneV2Endpoint();
         testConfig = SwiftKeystone2ObjectStorage.configBuilder()
             .endpoint(endpoint)
@@ -58,12 +58,12 @@ class SwiftKeystone2ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlo
     }
 
     @Override
-    public ContainerName containerName() {
-        return containerName;
+    public BucketName bucketName() {
+        return bucketName;
     }
 
     @Test
-    void containerNameIsMandatoryToBuildBlobsDAO() {
+    void bucketNameIsMandatoryToBuildBlobsDAO() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(testConfig)
             .container(null)
@@ -76,7 +76,7 @@ class SwiftKeystone2ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlo
     void blobIdFactoryIsMandatoryToBuildBlobsDAO() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(testConfig)
-            .container(containerName)
+            .container(bucketName)
             .blobIdFactory(null);
 
         assertThatThrownBy(builder::build).isInstanceOf(IllegalStateException.class);
@@ -86,7 +86,7 @@ class SwiftKeystone2ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlo
     void builtBlobsDAOCanStoreAndRetrieve() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(testConfig)
-            .container(containerName)
+            .container(bucketName)
             .blobIdFactory(new HashBlobId.Factory());
 
         assertBlobsDAOCanStoreAndRetrieve(builder);
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone3ObjectStorageBlobsDAOBuilderTest.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone3ObjectStorageBlobsDAOBuilderTest.java
index 35f85dc..d9e0576 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone3ObjectStorageBlobsDAOBuilderTest.java
+++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftKeystone3ObjectStorageBlobsDAOBuilderTest.java
@@ -25,8 +25,8 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
 
+import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.api.HashBlobId;
-import org.apache.james.blob.objectstorage.ContainerName;
 import org.apache.james.blob.objectstorage.DockerSwift;
 import org.apache.james.blob.objectstorage.DockerSwiftExtension;
 import org.apache.james.blob.objectstorage.ObjectStorageBlobsDAO;
@@ -69,7 +69,7 @@ class SwiftKeystone3ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlo
             .credentials(DEMO_PASSWORD)
             .project(Project.of(PROJECT_NAME, DOMAIN_ID));
 
-    private ContainerName containerName;
+    private BucketName bucketName;
 
     private SwiftKeystone3ObjectStorage.Configuration testConfig;
     private DockerSwift dockerSwift;
@@ -78,7 +78,7 @@ class SwiftKeystone3ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlo
     @BeforeEach
     void setUp(DockerSwift dockerSwift) {
         this.dockerSwift = dockerSwift;
-        containerName = ContainerName.of(UUID.randomUUID().toString());
+        bucketName = BucketName.of(UUID.randomUUID().toString());
         testConfig = PROJECT_CONFIG
             .endpoint(dockerSwift.keystoneV3Endpoint())
             .build();
@@ -91,12 +91,12 @@ class SwiftKeystone3ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlo
     }
 
     @Override
-    public ContainerName containerName() {
-        return containerName;
+    public BucketName bucketName() {
+        return bucketName;
     }
 
     @Test
-    void containerNameIsMandatoryToBuildBlobsDAO() {
+    void bucketNameIsMandatoryToBuildBlobsDAO() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(testConfig)
             .container(null)
@@ -109,7 +109,7 @@ class SwiftKeystone3ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlo
     void blobIdFactoryIsMandatoryToBuildBlobsDAO() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(testConfig)
-            .container(containerName)
+            .container(bucketName)
             .blobIdFactory(null);
 
         assertThatThrownBy(builder::build).isInstanceOf(IllegalStateException.class);
@@ -122,7 +122,7 @@ class SwiftKeystone3ObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlo
             configBuilders.get(key).endpoint(dockerSwift.keystoneV3Endpoint()).build();
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(config)
-            .container(containerName)
+            .container(bucketName)
             .blobIdFactory(new HashBlobId.Factory());
 
         assertBlobsDAOCanStoreAndRetrieve(builder);
diff --git a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftTempAuthObjectStorageBlobsDAOBuilderTest.java b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftTempAuthObjectStorageBlobsDAOBuilderTest.java
index 09619ed..662211b 100644
--- a/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftTempAuthObjectStorageBlobsDAOBuilderTest.java
+++ b/server/blob/blob-objectstorage/src/test/java/org/apache/james/blob/objectstorage/swift/SwiftTempAuthObjectStorageBlobsDAOBuilderTest.java
@@ -24,8 +24,8 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import java.net.URI;
 import java.util.UUID;
 
+import org.apache.james.blob.api.BucketName;
 import org.apache.james.blob.api.HashBlobId;
-import org.apache.james.blob.objectstorage.ContainerName;
 import org.apache.james.blob.objectstorage.DockerSwift;
 import org.apache.james.blob.objectstorage.DockerSwiftExtension;
 import org.apache.james.blob.objectstorage.ObjectStorageBlobsDAO;
@@ -42,13 +42,13 @@ class SwiftTempAuthObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlob
     private static final UserName USER_NAME = UserName.of("tester");
     private static final Credentials PASSWORD = Credentials.of("testing");
     private static final Identity SWIFT_IDENTITY = Identity.of(TENANT_NAME, USER_NAME);
-    private ContainerName containerName;
+    private BucketName bucketName;
     private URI endpoint;
     private SwiftTempAuthObjectStorage.Configuration testConfig;
 
     @BeforeEach
     void setUp(DockerSwift dockerSwift) {
-        containerName = ContainerName.of(UUID.randomUUID().toString());
+        bucketName = BucketName.of(UUID.randomUUID().toString());
         endpoint = dockerSwift.swiftEndpoint();
         testConfig = SwiftTempAuthObjectStorage.configBuilder()
             .endpoint(endpoint)
@@ -60,12 +60,12 @@ class SwiftTempAuthObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlob
     }
 
     @Override
-    public ContainerName containerName() {
-        return containerName;
+    public BucketName bucketName() {
+        return bucketName;
     }
 
     @Test
-    void containerNameIsMandatoryToBuildBlobsDAO() {
+    void bucketNameIsMandatoryToBuildBlobsDAO() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(testConfig)
             .container(null)
@@ -78,7 +78,7 @@ class SwiftTempAuthObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlob
     void blobIdFactoryIsMandatoryToBuildBlobsDAO() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(testConfig)
-            .container(containerName)
+            .container(bucketName)
             .blobIdFactory(null);
 
         assertThatThrownBy(builder::build).isInstanceOf(IllegalStateException.class);
@@ -88,7 +88,7 @@ class SwiftTempAuthObjectStorageBlobsDAOBuilderTest implements ObjectStorageBlob
     void builtBlobsDAOCanStoreAndRetrieve() {
         ObjectStorageBlobsDAOBuilder.ReadyToBuild builder = ObjectStorageBlobsDAO
             .builder(testConfig)
-            .container(containerName)
+            .container(bucketName)
             .blobIdFactory(new HashBlobId.Factory());
 
         assertBlobsDAOCanStoreAndRetrieve(builder);


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


[james-project] 03/12: JAMES-2806 BlobStore is in charge of providing default bucket name

Posted by bt...@apache.org.
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 265a97233340489117545f32870dae9abd6408bc
Author: Tran Tien Duc <dt...@linagora.com>
AuthorDate: Wed Jun 26 15:30:24 2019 +0700

    JAMES-2806 BlobStore is in charge of providing default bucket name
    
    Otherwise we have to write a new component to provide the default bucket name, then it will be injected every where whe use BlobStore. That way is more complex, requires coupling between BlobStore and the component provide default name
---
 .../blob-api/src/main/java/org/apache/james/blob/api/BlobStore.java     | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobStore.java b/server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobStore.java
index 3302203..0d1414d 100644
--- a/server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobStore.java
+++ b/server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobStore.java
@@ -37,5 +37,7 @@ public interface BlobStore {
         return save(bucketName, data.getBytes(StandardCharsets.UTF_8));
     }
 
+    BucketName getDefaultBucketName();
+
     Mono<Void> deleteBucket(BucketName bucketName);
 }


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