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 5e2756371c91e93bced13b795af4cb9a1403681a Author: Rémi Kowalski <[email protected]> AuthorDate: Tue Jul 21 13:48:03 2020 +0200 JAMES-3314 implement Passtrough blobstore --- .../james/vault/DeletedMessageVaultHookTest.java | 5 +- .../blob/BlobStoreDeletedMessageVaultTest.java | 5 +- .../blob/cassandra/CassandraBlobStoreFactory.java | 17 ++--- .../blob/cassandra/CassandraBlobStoreTest.java | 10 +-- ....java => CassandraPassTroughBlobStoreTest.java} | 13 ++-- .../file/LocalFileBlobExportMechanismTest.java | 5 +- .../james/blob/memory/MemoryBlobStoreFactory.java | 15 +---- .../memory/MemoryBlobStorePassThroughTest.java | 7 ++- .../james/blob/memory/MemoryBlobStoreTest.java | 5 +- .../blob/deduplication/BlobStoreFactory.java | 72 ++++++++++++++++++++++ .../blob/deduplication/StorageStrategy.java} | 21 ++----- .../blob/deduplication/PassThroughBlobStore.scala | 38 +++--------- .../james/blob/mail/MimeMessageStoreTest.java | 5 +- .../routes/DeletedMessagesVaultRoutesTest.java | 5 +- .../james/webadmin/service/ExportServiceTest.java | 5 -- .../webadmin/service/ExportServiceTestSystem.java | 5 +- .../linshare/LinshareBlobExportMechanismTest.java | 5 +- 17 files changed, 143 insertions(+), 95 deletions(-) diff --git a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultHookTest.java b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultHookTest.java index 766fdd9..0fa94af 100644 --- a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultHookTest.java +++ b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultHookTest.java @@ -109,7 +109,10 @@ class DeletedMessageVaultHookTest { void setUp() throws Exception { clock = Clock.fixed(DELETION_DATE.toInstant(), ZoneOffset.UTC); messageVault = new BlobStoreDeletedMessageVault(new RecordingMetricFactory(), new MemoryDeletedMessageMetadataVault(), - MemoryBlobStoreFactory.create(new HashBlobId.Factory()), new BucketNameGenerator(clock), clock, + MemoryBlobStoreFactory.builder() + .blobIdFactory(new HashBlobId.Factory()) + .defaultBucketName() + .passthrough(), new BucketNameGenerator(clock), clock, RetentionConfiguration.DEFAULT); DeletedMessageConverter deletedMessageConverter = new DeletedMessageConverter(); diff --git a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/blob/BlobStoreDeletedMessageVaultTest.java b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/blob/BlobStoreDeletedMessageVaultTest.java index a965a89..28b6506 100644 --- a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/blob/BlobStoreDeletedMessageVaultTest.java +++ b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/blob/BlobStoreDeletedMessageVaultTest.java @@ -64,7 +64,10 @@ class BlobStoreDeletedMessageVaultTest implements DeletedMessageVaultContract, D clock = new UpdatableTickingClock(NOW.toInstant()); metricFactory = new RecordingMetricFactory(); messageVault = new BlobStoreDeletedMessageVault(metricFactory, new MemoryDeletedMessageMetadataVault(), - MemoryBlobStoreFactory.create(new HashBlobId.Factory()), + MemoryBlobStoreFactory.builder() + .blobIdFactory(new HashBlobId.Factory()) + .defaultBucketName() + .passthrough(), new BucketNameGenerator(clock), clock, RetentionConfiguration.DEFAULT); } diff --git a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobStoreFactory.java b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobStoreFactory.java index cc51047..f1d0576 100644 --- a/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobStoreFactory.java +++ b/server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobStoreFactory.java @@ -23,24 +23,19 @@ import org.apache.james.backends.cassandra.init.configuration.CassandraConfigura 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.server.blob.deduplication.DeDuplicationBlobStore; +import org.apache.james.server.blob.deduplication.BlobStoreFactory; import com.datastax.driver.core.Session; public class CassandraBlobStoreFactory { - public static BlobStore forTesting(HashBlobId.Factory blobIdFactory, - BucketName defaultBucketName, - CassandraDumbBlobStore dumbBlobStore) { - return new DeDuplicationBlobStore(dumbBlobStore, defaultBucketName, blobIdFactory); - } - public static BlobStore forTesting(Session session) { HashBlobId.Factory blobIdFactory = new HashBlobId.Factory(); CassandraBucketDAO bucketDAO = new CassandraBucketDAO(blobIdFactory, session); CassandraDefaultBucketDAO defaultBucketDAO = new CassandraDefaultBucketDAO(session); - return forTesting( - blobIdFactory, - BucketName.DEFAULT, - new CassandraDumbBlobStore(defaultBucketDAO, bucketDAO, CassandraConfiguration.DEFAULT_CONFIGURATION, BucketName.DEFAULT)); + CassandraDumbBlobStore dumbBlobStore = new CassandraDumbBlobStore(defaultBucketDAO, bucketDAO, CassandraConfiguration.DEFAULT_CONFIGURATION, BucketName.DEFAULT); + return BlobStoreFactory.builder().dumbBlobStore(dumbBlobStore) + .blobIdFactory(blobIdFactory) + .defaultBucketName() + .passthrough(); } } diff --git a/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreTest.java b/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreTest.java index cf43ad5..ae9136b 100644 --- a/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreTest.java +++ b/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreTest.java @@ -40,6 +40,7 @@ import org.apache.james.blob.api.HashBlobId; import org.apache.james.blob.api.MetricableBlobStore; import org.apache.james.blob.api.MetricableBlobStoreContract; import org.apache.james.blob.api.ObjectStoreException; +import org.apache.james.server.blob.deduplication.BlobStoreFactory; import org.apache.james.util.io.ZeroedInputStream; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -71,10 +72,11 @@ public class CassandraBlobStoreTest implements MetricableBlobStoreContract { .build(); testee = new MetricableBlobStore( metricsTestExtension.getMetricFactory(), - CassandraBlobStoreFactory.forTesting( - blobIdFactory, - BucketName.DEFAULT, - new CassandraDumbBlobStore(defaultBucketDAO, bucketDAO, cassandraConfiguration, BucketName.DEFAULT))); + BlobStoreFactory.builder() + .dumbBlobStore(new CassandraDumbBlobStore(defaultBucketDAO, bucketDAO, cassandraConfiguration, BucketName.DEFAULT)) + .blobIdFactory(blobIdFactory) + .defaultBucketName() + .deduplication()); } @Override diff --git a/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreTest.java b/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraPassTroughBlobStoreTest.java similarity index 93% copy from server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreTest.java copy to server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraPassTroughBlobStoreTest.java index cf43ad5..9ea1731 100644 --- a/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreTest.java +++ b/server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraPassTroughBlobStoreTest.java @@ -40,6 +40,7 @@ import org.apache.james.blob.api.HashBlobId; import org.apache.james.blob.api.MetricableBlobStore; import org.apache.james.blob.api.MetricableBlobStoreContract; import org.apache.james.blob.api.ObjectStoreException; +import org.apache.james.server.blob.deduplication.BlobStoreFactory; import org.apache.james.util.io.ZeroedInputStream; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -48,10 +49,9 @@ import org.junit.jupiter.api.extension.RegisterExtension; import com.google.common.base.Strings; import com.google.common.hash.Hashing; import com.google.common.hash.HashingInputStream; - import reactor.core.publisher.Mono; -public class CassandraBlobStoreTest implements MetricableBlobStoreContract { +public class CassandraPassTroughBlobStoreTest implements MetricableBlobStoreContract { private static final int CHUNK_SIZE = 10240; private static final int MULTIPLE_CHUNK_SIZE = 3; @@ -71,10 +71,11 @@ public class CassandraBlobStoreTest implements MetricableBlobStoreContract { .build(); testee = new MetricableBlobStore( metricsTestExtension.getMetricFactory(), - CassandraBlobStoreFactory.forTesting( - blobIdFactory, - BucketName.DEFAULT, - new CassandraDumbBlobStore(defaultBucketDAO, bucketDAO, cassandraConfiguration, BucketName.DEFAULT))); + BlobStoreFactory.builder() + .dumbBlobStore(new CassandraDumbBlobStore(defaultBucketDAO, bucketDAO, cassandraConfiguration, BucketName.DEFAULT)) + .blobIdFactory(blobIdFactory) + .defaultBucketName() + .passthrough()); } @Override 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 4eff0c4..5655d0e 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 @@ -67,7 +67,10 @@ class LocalFileBlobExportMechanismTest { @BeforeEach void setUp(FileSystem fileSystem) throws Exception { mailetContext = FakeMailContext.builder().postmaster(MailAddressFixture.POSTMASTER_AT_JAMES).build(); - blobStore = MemoryBlobStoreFactory.create(new HashBlobId.Factory()); + blobStore = MemoryBlobStoreFactory.builder() + .blobIdFactory(new HashBlobId.Factory()) + .defaultBucketName() + .passthrough(); InetAddress localHost = mock(InetAddress.class); when(localHost.getHostName()).thenReturn(JAMES_HOST); diff --git a/server/blob/blob-memory/src/main/java/org/apache/james/blob/memory/MemoryBlobStoreFactory.java b/server/blob/blob-memory/src/main/java/org/apache/james/blob/memory/MemoryBlobStoreFactory.java index 5e7c7e2..bc59922 100644 --- a/server/blob/blob-memory/src/main/java/org/apache/james/blob/memory/MemoryBlobStoreFactory.java +++ b/server/blob/blob-memory/src/main/java/org/apache/james/blob/memory/MemoryBlobStoreFactory.java @@ -19,19 +19,10 @@ package org.apache.james.blob.memory; -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.server.blob.deduplication.DeDuplicationBlobStore; +import org.apache.james.server.blob.deduplication.BlobStoreFactory; public class MemoryBlobStoreFactory { - public static BlobStore create(BlobId.Factory factory) { - return create(factory, BucketName.DEFAULT); - } - - public static BlobStore create(BlobId.Factory factory, BucketName defaultBucketName) { - return new DeDuplicationBlobStore( - new MemoryDumbBlobStore(), - defaultBucketName, factory); + public static BlobStoreFactory.RequireBlobIdFactory builder() { + return BlobStoreFactory.builder().dumbBlobStore(new MemoryDumbBlobStore()); } } diff --git a/server/blob/blob-memory/src/test/java/org/apache/james/blob/memory/MemoryBlobStorePassThroughTest.java b/server/blob/blob-memory/src/test/java/org/apache/james/blob/memory/MemoryBlobStorePassThroughTest.java index 80dba7e..aa72550 100644 --- a/server/blob/blob-memory/src/test/java/org/apache/james/blob/memory/MemoryBlobStorePassThroughTest.java +++ b/server/blob/blob-memory/src/test/java/org/apache/james/blob/memory/MemoryBlobStorePassThroughTest.java @@ -26,14 +26,17 @@ import org.apache.james.blob.api.MetricableBlobStore; import org.apache.james.blob.api.MetricableBlobStoreContract; import org.junit.jupiter.api.BeforeEach; -public class MemoryBlobStoreTest implements MetricableBlobStoreContract { +public class MemoryBlobStorePassThroughTest implements MetricableBlobStoreContract { private static final HashBlobId.Factory BLOB_ID_FACTORY = new HashBlobId.Factory(); private BlobStore blobStore; @BeforeEach void setUp() { - blobStore = new MetricableBlobStore(metricsTestExtension.getMetricFactory(), MemoryBlobStoreFactory.create(BLOB_ID_FACTORY)); + blobStore = new MetricableBlobStore(metricsTestExtension.getMetricFactory(), MemoryBlobStoreFactory.builder() + .blobIdFactory(BLOB_ID_FACTORY) + .defaultBucketName() + .passthrough()); } @Override diff --git a/server/blob/blob-memory/src/test/java/org/apache/james/blob/memory/MemoryBlobStoreTest.java b/server/blob/blob-memory/src/test/java/org/apache/james/blob/memory/MemoryBlobStoreTest.java index 80dba7e..147133c 100644 --- a/server/blob/blob-memory/src/test/java/org/apache/james/blob/memory/MemoryBlobStoreTest.java +++ b/server/blob/blob-memory/src/test/java/org/apache/james/blob/memory/MemoryBlobStoreTest.java @@ -33,7 +33,10 @@ public class MemoryBlobStoreTest implements MetricableBlobStoreContract { @BeforeEach void setUp() { - blobStore = new MetricableBlobStore(metricsTestExtension.getMetricFactory(), MemoryBlobStoreFactory.create(BLOB_ID_FACTORY)); + blobStore = new MetricableBlobStore(metricsTestExtension.getMetricFactory(), new MetricableBlobStore(metricsTestExtension.getMetricFactory(), MemoryBlobStoreFactory.builder() + .blobIdFactory(BLOB_ID_FACTORY) + .defaultBucketName() + .deduplication())); } @Override diff --git a/server/blob/blob-storage-strategy/src/main/java/org/apache/james/server/blob/deduplication/BlobStoreFactory.java b/server/blob/blob-storage-strategy/src/main/java/org/apache/james/server/blob/deduplication/BlobStoreFactory.java new file mode 100644 index 0000000..4a3fdc3 --- /dev/null +++ b/server/blob/blob-storage-strategy/src/main/java/org/apache/james/server/blob/deduplication/BlobStoreFactory.java @@ -0,0 +1,72 @@ +/**************************************************************** + * 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.server.blob.deduplication; + +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.DumbBlobStore; + +public abstract class BlobStoreFactory { + @FunctionalInterface + public interface RequireDumbBlobStore { + RequireBlobIdFactory dumbBlobStore(DumbBlobStore dumbBlobStore); + } + + @FunctionalInterface + public interface RequireBlobIdFactory { + RequireBucketName blobIdFactory(BlobId.Factory blobIdFactory); + } + + @FunctionalInterface + public interface RequireBucketName { + RequireStoringStrategy bucket(BucketName defaultBucketName); + + default RequireStoringStrategy defaultBucketName() { + return bucket(BucketName.DEFAULT); + } + } + + @FunctionalInterface + public interface RequireStoringStrategy { + BlobStore strategy(StorageStrategy storageStrategy); + + default BlobStore passthrough() { + return strategy(StorageStrategy.PASSTHROUGH); + } + + default BlobStore deduplication() { + return strategy(StorageStrategy.DEDUPLICATION); + } + } + + public static RequireDumbBlobStore builder() { + return dumbBlobStore -> blobIdFactory -> defaultBucketName -> storageStrategy -> { + switch (storageStrategy) { + case PASSTHROUGH: + return new PassThroughBlobStore(dumbBlobStore, defaultBucketName, blobIdFactory); + case DEDUPLICATION: + return new DeDuplicationBlobStore(dumbBlobStore, defaultBucketName, blobIdFactory); + default: + throw new IllegalArgumentException("Unknown storage strategy"); + } + }; + } +} diff --git a/server/blob/blob-memory/src/main/java/org/apache/james/blob/memory/MemoryBlobStoreFactory.java b/server/blob/blob-storage-strategy/src/main/java/org/apache/james/server/blob/deduplication/StorageStrategy.java similarity index 65% copy from server/blob/blob-memory/src/main/java/org/apache/james/blob/memory/MemoryBlobStoreFactory.java copy to server/blob/blob-storage-strategy/src/main/java/org/apache/james/server/blob/deduplication/StorageStrategy.java index 5e7c7e2..91d2df1 100644 --- a/server/blob/blob-memory/src/main/java/org/apache/james/blob/memory/MemoryBlobStoreFactory.java +++ b/server/blob/blob-storage-strategy/src/main/java/org/apache/james/server/blob/deduplication/StorageStrategy.java @@ -16,22 +16,9 @@ * specific language governing permissions and limitations * * under the License. * ****************************************************************/ +package org.apache.james.server.blob.deduplication; -package org.apache.james.blob.memory; - -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.server.blob.deduplication.DeDuplicationBlobStore; - -public class MemoryBlobStoreFactory { - public static BlobStore create(BlobId.Factory factory) { - return create(factory, BucketName.DEFAULT); - } - - public static BlobStore create(BlobId.Factory factory, BucketName defaultBucketName) { - return new DeDuplicationBlobStore( - new MemoryDumbBlobStore(), - defaultBucketName, factory); - } +public enum StorageStrategy { + PASSTHROUGH, + DEDUPLICATION } diff --git a/server/blob/blob-storage-strategy/src/main/scala/org/apache/james/server/blob/deduplication/PassThroughBlobStore.scala b/server/blob/blob-storage-strategy/src/main/scala/org/apache/james/server/blob/deduplication/PassThroughBlobStore.scala index 5bd663f..5f29ffd 100644 --- a/server/blob/blob-storage-strategy/src/main/scala/org/apache/james/server/blob/deduplication/PassThroughBlobStore.scala +++ b/server/blob/blob-storage-strategy/src/main/scala/org/apache/james/server/blob/deduplication/PassThroughBlobStore.scala @@ -22,31 +22,21 @@ package org.apache.james.server.blob.deduplication import java.io.InputStream import com.google.common.base.Preconditions -import com.google.common.hash.{Hashing, HashingInputStream} -import com.google.common.io.{ByteSource, FileBackedOutputStream} import javax.inject.{Inject, Named} -import org.apache.commons.io.IOUtils import org.apache.james.blob.api.{BlobId, BlobStore, BucketName, DumbBlobStore} import org.reactivestreams.Publisher -import reactor.core.publisher.Mono import reactor.core.scala.publisher.SMono -import reactor.util.function.{Tuple2, Tuples} -object DeDuplicationBlobStore { - val DEFAULT_BUCKET = "defaultBucket" - val LAZY_RESOURCE_CLEANUP = false - val FILE_THRESHOLD = 10000 -} -class DeDuplicationBlobStore @Inject()(dumbBlobStore: DumbBlobStore, - @Named("defaultBucket") defaultBucketName: BucketName, - blobIdFactory: BlobId.Factory) extends BlobStore { +class PassThroughBlobStore @Inject()(dumbBlobStore: DumbBlobStore, + @Named("defaultBucket") defaultBucketName: BucketName, + blobIdFactory: BlobId.Factory) extends BlobStore { override def save(bucketName: BucketName, data: Array[Byte], storagePolicy: BlobStore.StoragePolicy): Publisher[BlobId] = { Preconditions.checkNotNull(bucketName) Preconditions.checkNotNull(data) - val blobId = blobIdFactory.forPayload(data) + val blobId = blobIdFactory.randomId() SMono(dumbBlobStore.save(bucketName, blobId, data)) .`then`(SMono.just(blobId)) @@ -55,23 +45,11 @@ class DeDuplicationBlobStore @Inject()(dumbBlobStore: DumbBlobStore, override def save(bucketName: BucketName, data: InputStream, storagePolicy: BlobStore.StoragePolicy): Publisher[BlobId] = { Preconditions.checkNotNull(bucketName) Preconditions.checkNotNull(data) - val hashingInputStream = new HashingInputStream(Hashing.sha256, data) - val sourceSupplier: FileBackedOutputStream => SMono[BlobId] = (fileBackedOutputStream: FileBackedOutputStream) => saveAndGenerateBlobId(bucketName, hashingInputStream, fileBackedOutputStream) - Mono.using(() => new FileBackedOutputStream(DeDuplicationBlobStore.FILE_THRESHOLD), - sourceSupplier, - (fileBackedOutputStream: FileBackedOutputStream) => fileBackedOutputStream.reset(), - DeDuplicationBlobStore.LAZY_RESOURCE_CLEANUP) - } - - private def saveAndGenerateBlobId(bucketName: BucketName, hashingInputStream: HashingInputStream, fileBackedOutputStream: FileBackedOutputStream): SMono[BlobId] = - SMono.fromCallable(() => { - IOUtils.copy(hashingInputStream, fileBackedOutputStream) - Tuples.of(blobIdFactory.from(hashingInputStream.hash.toString), fileBackedOutputStream.asByteSource) - }) - .flatMap((tuple: Tuple2[BlobId, ByteSource]) => - SMono(dumbBlobStore.save(bucketName, tuple.getT1, tuple.getT2)) - .`then`(SMono.just(tuple.getT1))) + val blobId = blobIdFactory.randomId() + SMono(dumbBlobStore.save(bucketName, blobId, data)) + .`then`(SMono.just(blobId)) + } override def readBytes(bucketName: BucketName, blobId: BlobId): Publisher[Array[Byte]] = { Preconditions.checkNotNull(bucketName) 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 e1dda9a..bb24ab5 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 @@ -47,7 +47,10 @@ class MimeMessageStoreTest { @BeforeEach void setUp() { - blobStore = MemoryBlobStoreFactory.create(BLOB_ID_FACTORY); + blobStore = MemoryBlobStoreFactory.builder() + .blobIdFactory(BLOB_ID_FACTORY) + .defaultBucketName() + .passthrough(); testee = MimeMessageStore.factory(blobStore).mimeMessageStore(); } 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 43004e0..3cf3d00 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 @@ -176,7 +176,10 @@ class DeletedMessagesVaultRoutesTest { @BeforeEach void beforeEach() throws Exception { blobIdFactory = new HashBlobId.Factory(); - blobStore = spy(MemoryBlobStoreFactory.create(blobIdFactory)); + blobStore = spy(MemoryBlobStoreFactory.builder() + .blobIdFactory(blobIdFactory) + .defaultBucketName() + .passthrough()); clock = new UpdatableTickingClock(OLD_DELETION_DATE.toInstant()); vault = spy(new BlobStoreDeletedMessageVault(new RecordingMetricFactory(), new MemoryDeletedMessageMetadataVault(), blobStore, new BucketNameGenerator(clock), clock, diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ExportServiceTest.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ExportServiceTest.java index fa0c391..c016b59 100644 --- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ExportServiceTest.java +++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ExportServiceTest.java @@ -206,11 +206,6 @@ class ExportServiceTest { Task.Result result = testee.export(progress, BOB).block(); - String fileName = Files.getNameWithoutExtension(getFileUrl()); - String blobId = fileName.substring(fileName.lastIndexOf("-") + 1); - - testSystem.blobStore.read(testSystem.blobStore.getDefaultBucketName(), FACTORY.from(blobId)); - assertThat(result).isEqualTo(Task.Result.COMPLETED); } diff --git a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ExportServiceTestSystem.java b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ExportServiceTestSystem.java index 389ffad..c7b0b94 100644 --- a/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ExportServiceTestSystem.java +++ b/server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ExportServiceTestSystem.java @@ -76,7 +76,10 @@ public class ExportServiceTestSystem { bobSession = mailboxManager.createSystemSession(BOB); - blobStore = Mockito.spy(MemoryBlobStoreFactory.create(FACTORY)); + blobStore = Mockito.spy(MemoryBlobStoreFactory.builder() + .blobIdFactory(FACTORY) + .defaultBucketName() + .passthrough()); mailetContext = FakeMailContext.builder().postmaster(MailAddressFixture.POSTMASTER_AT_JAMES).build(); blobExport = new LocalFileBlobExportMechanism(mailetContext, blobStore, fileSystem, dnsService, LocalFileBlobExportMechanism.Configuration.DEFAULT_CONFIGURATION); 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 738d4b0..4ed698e 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 @@ -58,7 +58,10 @@ class LinshareBlobExportMechanismTest { @BeforeEach void setUp() throws Exception { blobIdFactory = new HashBlobId.Factory(); - blobStore = MemoryBlobStoreFactory.create(blobIdFactory); + blobStore = MemoryBlobStoreFactory.builder() + .blobIdFactory(blobIdFactory) + .defaultBucketName() + .passthrough(); testee = new LinshareBlobExportMechanism( linshareExtension.getDelegationAccountAPI(), --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
