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

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

commit 72eeef88e33c24d1b85d17b390e3184998d29201
Author: RĂ©mi Kowalski <[email protected]>
AuthorDate: Wed Sep 4 18:23:18 2019 +0200

    JAMES-2813 don't serialize unnecessary information for 
BlobStoreVaultGarbageCollectionTask
---
 .../vault/blob/BlobStoreDeletedMessageVault.java   | 23 +++++++----
 .../blob/BlobStoreVaultGarbageCollectionTask.java  | 22 +++++++++--
 .../BlobStoreVaultGarbageCollectionTaskDTO.java    | 45 +++++-----------------
 ...aultGarbageCollectionTaskSerializationTest.java | 32 ++++++++-------
 4 files changed, 60 insertions(+), 62 deletions(-)

diff --git 
a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreDeletedMessageVault.java
 
b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreDeletedMessageVault.java
index 143825c..ac9c1b7 100644
--- 
a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreDeletedMessageVault.java
+++ 
b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreDeletedMessageVault.java
@@ -47,7 +47,6 @@ import org.slf4j.LoggerFactory;
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
-
 import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
 import reactor.core.scheduler.Schedulers;
@@ -68,18 +67,20 @@ public class BlobStoreDeletedMessageVault implements 
DeletedMessageVault {
     private final BucketNameGenerator nameGenerator;
     private final Clock clock;
     private final RetentionConfiguration retentionConfiguration;
+    private final BlobStoreVaultGarbageCollectionTask.Factory taskFactory;
 
     @Inject
     public BlobStoreDeletedMessageVault(MetricFactory metricFactory, 
DeletedMessageMetadataVault messageMetadataVault,
-                                 BlobStore blobStore, BucketNameGenerator 
nameGenerator,
-                                 Clock clock,
-                                 RetentionConfiguration 
retentionConfiguration) {
+                                        BlobStore blobStore, 
BucketNameGenerator nameGenerator,
+                                        Clock clock,
+                                        RetentionConfiguration 
retentionConfiguration) {
         this.metricFactory = metricFactory;
         this.messageMetadataVault = messageMetadataVault;
         this.blobStore = blobStore;
         this.nameGenerator = nameGenerator;
         this.clock = clock;
         this.retentionConfiguration = retentionConfiguration;
+        this.taskFactory = new 
BlobStoreVaultGarbageCollectionTask.Factory(this);
     }
 
     @Override
@@ -158,15 +159,21 @@ public class BlobStoreDeletedMessageVault implements 
DeletedMessageVault {
 
     @Override
     public Task deleteExpiredMessagesTask() {
-        ZonedDateTime now = ZonedDateTime.now(clock);
-        ZonedDateTime beginningOfRetentionPeriod = 
now.minus(retentionConfiguration.getRetentionPeriod());
+        return taskFactory.create();
+    }
+
 
-        Flux<BucketName> metricAbleDeleteOperation = 
metricFactory.runPublishingTimerMetric(
+    Flux<BucketName> deleteExpiredMessages(ZonedDateTime 
beginningOfRetentionPeriod) {
+        return metricFactory.runPublishingTimerMetric(
             DELETE_EXPIRED_MESSAGES_METRIC_NAME,
             retentionQualifiedBuckets(beginningOfRetentionPeriod)
                 .flatMap(bucketName -> 
deleteBucketData(bucketName).then(Mono.just(bucketName))));
 
-        return new 
BlobStoreVaultGarbageCollectionTask(beginningOfRetentionPeriod, 
metricAbleDeleteOperation);
+    }
+
+    ZonedDateTime getBeginningOfRetentionPeriod() {
+        ZonedDateTime now = ZonedDateTime.now(clock);
+        return now.minus(retentionConfiguration.getRetentionPeriod());
     }
 
     @VisibleForTesting
diff --git 
a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTask.java
 
b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTask.java
index cfddb37..cf49b6a 100644
--- 
a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTask.java
+++ 
b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTask.java
@@ -25,13 +25,14 @@ import java.util.List;
 import java.util.Optional;
 import java.util.concurrent.ConcurrentLinkedQueue;
 
+import javax.inject.Inject;
+
 import org.apache.james.blob.api.BucketName;
 import org.apache.james.task.Task;
 import org.apache.james.task.TaskExecutionDetails;
 import org.apache.james.task.TaskType;
 
 import com.github.steveash.guavate.Guavate;
-
 import reactor.core.publisher.Flux;
 import reactor.core.scheduler.Schedulers;
 
@@ -64,9 +65,22 @@ public class BlobStoreVaultGarbageCollectionTask implements 
Task {
     private final ZonedDateTime beginningOfRetentionPeriod;
     private final Collection<BucketName> deletedBuckets;
 
-    BlobStoreVaultGarbageCollectionTask(ZonedDateTime 
beginningOfRetentionPeriod, Flux<BucketName> retentionOperation) {
-        this.retentionOperation = retentionOperation;
-        this.beginningOfRetentionPeriod = beginningOfRetentionPeriod;
+    public static class Factory {
+        private final BlobStoreDeletedMessageVault deletedMessageVault;
+
+        @Inject
+        public Factory(BlobStoreDeletedMessageVault deletedMessageVault) {
+            this.deletedMessageVault = deletedMessageVault;
+        }
+
+        public BlobStoreVaultGarbageCollectionTask create() {
+            return new 
BlobStoreVaultGarbageCollectionTask(deletedMessageVault);
+        }
+    }
+
+    private BlobStoreVaultGarbageCollectionTask(BlobStoreDeletedMessageVault 
deletedMessageVault) {
+        this.beginningOfRetentionPeriod = 
deletedMessageVault.getBeginningOfRetentionPeriod();
+        this.retentionOperation = 
deletedMessageVault.deleteExpiredMessages(beginningOfRetentionPeriod);
         this.deletedBuckets = new ConcurrentLinkedQueue<>();
     }
 
diff --git 
a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTaskDTO.java
 
b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTaskDTO.java
index bbdb794..da62197 100644
--- 
a/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTaskDTO.java
+++ 
b/mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTaskDTO.java
@@ -7,9 +7,9 @@
  * 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       *
@@ -20,57 +20,37 @@
 
 package org.apache.james.vault.blob;
 
-import java.time.ZonedDateTime;
-import java.util.Collection;
+import java.util.function.Function;
 
-import org.apache.james.blob.api.BucketName;
 import org.apache.james.json.DTOModule;
 import org.apache.james.server.task.json.dto.TaskDTO;
 import org.apache.james.server.task.json.dto.TaskDTOModule;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
-import com.github.steveash.guavate.Guavate;
-import reactor.core.publisher.Flux;
 
 public class BlobStoreVaultGarbageCollectionTaskDTO implements TaskDTO {
     static BlobStoreVaultGarbageCollectionTaskDTO 
fromDomainObject(BlobStoreVaultGarbageCollectionTask task, String type) {
-        return new BlobStoreVaultGarbageCollectionTaskDTO(
-            type,
-            task.getBeginningOfRetentionPeriod().toString(),
-            task.getRetentionOperation()
-                .map(BucketName::asString)
-                .collect(Guavate.toImmutableList())
-                .block()
-        );
+        return new BlobStoreVaultGarbageCollectionTaskDTO(type);
     }
 
-    public static final TaskDTOModule<BlobStoreVaultGarbageCollectionTask, 
BlobStoreVaultGarbageCollectionTaskDTO> MODULE =
+    public static final Function<BlobStoreVaultGarbageCollectionTask.Factory, 
TaskDTOModule<BlobStoreVaultGarbageCollectionTask, 
BlobStoreVaultGarbageCollectionTaskDTO>> MODULE = factory ->
         DTOModule
             .forDomainObject(BlobStoreVaultGarbageCollectionTask.class)
             .convertToDTO(BlobStoreVaultGarbageCollectionTaskDTO.class)
-            
.toDomainObjectConverter(BlobStoreVaultGarbageCollectionTaskDTO::toDomainObject)
+            .toDomainObjectConverter(dto -> 
BlobStoreVaultGarbageCollectionTaskDTO.toDomainObject(factory))
             
.toDTOConverter(BlobStoreVaultGarbageCollectionTaskDTO::fromDomainObject)
             .typeName(BlobStoreVaultGarbageCollectionTask.TYPE.asString())
             .withFactory(TaskDTOModule::new);
 
 
     private final String type;
-    private final String beginningOfRetentionPeriod;
-    private final Collection<String> retentionOperation;
 
-    BlobStoreVaultGarbageCollectionTaskDTO(@JsonProperty("type") String type,
-                                           
@JsonProperty("beginningOfRetentionPeriod") String beginningOfRetentionPeriod,
-                                           @JsonProperty("retentionOperation") 
Collection<String> retentionOperation) {
+    BlobStoreVaultGarbageCollectionTaskDTO(@JsonProperty("type") String type) {
         this.type = type;
-        this.beginningOfRetentionPeriod = beginningOfRetentionPeriod;
-        this.retentionOperation = retentionOperation;
     }
 
-    BlobStoreVaultGarbageCollectionTask toDomainObject() {
-        return new BlobStoreVaultGarbageCollectionTask(
-            ZonedDateTime.parse(beginningOfRetentionPeriod),
-            Flux.fromIterable(retentionOperation)
-                .map(BucketName::of));
+    private static BlobStoreVaultGarbageCollectionTask 
toDomainObject(BlobStoreVaultGarbageCollectionTask.Factory factory) {
+        return factory.create();
     }
 
     @Override
@@ -78,11 +58,4 @@ public class BlobStoreVaultGarbageCollectionTaskDTO 
implements TaskDTO {
         return type;
     }
 
-    public String getBeginningOfRetentionPeriod() {
-        return beginningOfRetentionPeriod;
-    }
-
-    public Collection<String> getRetentionOperation() {
-        return retentionOperation;
-    }
 }
diff --git 
a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTaskSerializationTest.java
 
b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTaskSerializationTest.java
index 97a93af..85e6f6b 100644
--- 
a/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTaskSerializationTest.java
+++ 
b/mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTaskSerializationTest.java
@@ -22,6 +22,7 @@ package org.apache.james.vault.blob;
 
 import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.any;
 
 import java.io.IOException;
 import java.time.ZonedDateTime;
@@ -33,23 +34,37 @@ import org.apache.james.task.Task;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.google.common.collect.ImmutableList;
+
+import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+
 import reactor.core.publisher.Flux;
 
 class BlobStoreVaultGarbageCollectionTaskSerializationTest {
+   private static final BlobStoreDeletedMessageVault DELETED_MESSAGE_VAULT = 
Mockito.mock(BlobStoreDeletedMessageVault.class);
+   private static final BlobStoreVaultGarbageCollectionTask.Factory 
TASK_FACTORY = new 
BlobStoreVaultGarbageCollectionTask.Factory(DELETED_MESSAGE_VAULT);
 
-    private static final JsonTaskSerializer TASK_SERIALIZER = new 
JsonTaskSerializer(BlobStoreVaultGarbageCollectionTaskDTO.MODULE);
+    private static final JsonTaskSerializer TASK_SERIALIZER = new 
JsonTaskSerializer(BlobStoreVaultGarbageCollectionTaskDTO.MODULE.apply(TASK_FACTORY));
     private static final ZonedDateTime BEGINNING_OF_RETENTION_PERIOD = 
ZonedDateTime.parse("2019-09-03T15:26:13.356+02:00[Europe/Paris]");
     private static final ImmutableList<BucketName> BUCKET_IDS = 
ImmutableList.of(BucketName.of("1"), BucketName.of("2"), BucketName.of("3"));
     private static final Flux<BucketName> RETENTION_OPERATION = 
Flux.fromIterable(BUCKET_IDS);
     private static final 
BlobStoreVaultGarbageCollectionTask.AdditionalInformation DETAILS = new 
BlobStoreVaultGarbageCollectionTask.AdditionalInformation(BEGINNING_OF_RETENTION_PERIOD,
 BUCKET_IDS);
-    private static final BlobStoreVaultGarbageCollectionTask TASK = new 
BlobStoreVaultGarbageCollectionTask(BEGINNING_OF_RETENTION_PERIOD, 
RETENTION_OPERATION);
+    private static final BlobStoreVaultGarbageCollectionTask TASK = 
TASK_FACTORY.create();
 
-    private static final String SERIALIZED_TASK = 
"{\"beginningOfRetentionPeriod\":\"2019-09-03T15:26:13.356+02:00[Europe/Paris]\",\"retentionOperation\":[\"1\",
 \"2\", \"3\"],\"type\":\"deletedMessages/blobStoreBasedGarbageCollection\"}";
+    private static final String SERIALIZED_TASK = 
"{\"type\":\"deletedMessages/blobStoreBasedGarbageCollection\"}";
     private static final String SERIALIZED_ADDITIONAL_INFORMATION_TASK = 
"{\"beginningOfRetentionPeriod\":\"2019-09-03T15:26:13.356+02:00[Europe/Paris]\",\"deletedBuckets\":[\"1\",
 \"2\", \"3\"]}";
 
     private static final JsonTaskAdditionalInformationsSerializer 
JSON_TASK_ADDITIONAL_INFORMATIONS_SERIALIZER = new 
JsonTaskAdditionalInformationsSerializer(BlobStoreVaultGarbageCollectionTaskAdditionalInformationDTO.MODULE);
 
+    @BeforeAll
+    static void setUp() {
+        Mockito.when(DELETED_MESSAGE_VAULT.getBeginningOfRetentionPeriod())
+            .thenReturn(BEGINNING_OF_RETENTION_PERIOD);
+        Mockito.when(DELETED_MESSAGE_VAULT.deleteExpiredMessages(any()))
+            .thenReturn(RETENTION_OPERATION);
+    }
+
     @Test
     void taskShouldBeSerializable() throws JsonProcessingException {
         assertThatJson(TASK_SERIALIZER.serialize(TASK))
@@ -61,17 +76,6 @@ class BlobStoreVaultGarbageCollectionTaskSerializationTest {
         Task deserialized = TASK_SERIALIZER.deserialize(SERIALIZED_TASK);
 
         
assertThat(deserialized).isInstanceOf(BlobStoreVaultGarbageCollectionTask.class);
-        BlobStoreVaultGarbageCollectionTask 
blobStoreVaultGarbageCollectionTask = (BlobStoreVaultGarbageCollectionTask) 
deserialized;
-        
assertThat(blobStoreVaultGarbageCollectionTask.getBeginningOfRetentionPeriod())
-            .isEqualTo(TASK.getBeginningOfRetentionPeriod());
-        assertThat(blobStoreVaultGarbageCollectionTask
-            .getRetentionOperation()
-            .collectList()
-            .block())
-            .isEqualTo(TASK
-                .getRetentionOperation()
-                .collectList()
-                .block());
     }
 
     @Test


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

Reply via email to