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

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

commit 4a189fa84b126c7c57019d1f7a3a3b1a1b1d1a2c
Author: LanKhuat <khuatdang...@gmail.com>
AuthorDate: Wed Jun 3 17:42:06 2020 +0700

    JAMES-3201 Update tasks serialization
---
 .../tools/indexer/ErrorRecoveryIndexationTask.java |  4 +-
 .../indexer/ErrorRecoveryIndexationTaskDTO.java    | 25 ++++++---
 .../indexer/ReprocessingContextInformationDTO.java | 61 ++++++++++++++++------
 ...lboxReindexingTaskAdditionalInformationDTO.java | 25 ++++++---
 ...UserReindexingTaskAdditionalInformationDTO.java | 26 ++++++---
 ...rorRecoveryIndexationTaskSerializationTest.java | 13 ++---
 .../FullReindexingTaskSerializationTest.java       | 16 +++---
 ...erializableReIndexingExecutionFailuresTest.java |  4 +-
 ...ngleMailboxReindexingTaskSerializationTest.java | 11 ++--
 .../UserReindexingTaskSerializationTest.java       | 13 +++--
 10 files changed, 140 insertions(+), 58 deletions(-)

diff --git 
a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTask.java
 
b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTask.java
index 91dfbe4..4b77b4e 100644
--- 
a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTask.java
+++ 
b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTask.java
@@ -34,6 +34,7 @@ import org.apache.james.task.TaskExecutionDetails;
 import org.apache.james.task.TaskType;
 
 import com.github.steveash.guavate.Guavate;
+import com.google.common.collect.ImmutableList;
 
 public class ErrorRecoveryIndexationTask implements Task {
     public static final TaskType PREVIOUS_FAILURES_INDEXING = 
TaskType.of("error-recovery-indexation");
@@ -68,7 +69,8 @@ public class ErrorRecoveryIndexationTask implements Task {
 
         public ErrorRecoveryIndexationTask 
create(ErrorRecoveryIndexationTaskDTO dto) {
             return new ErrorRecoveryIndexationTask(reIndexerPerformer,
-                new 
ReIndexingExecutionFailures(messageFailuresFromDTO(dto.getPreviousFailures())),
+                new 
ReIndexingExecutionFailures(messageFailuresFromDTO(dto.getPreviousMessageFailures()),
+                    mailboxFailuresFromDTO(dto.getPreviousMailboxFailures())),
                 dto.getRunningOptions()
                     .map(RunningOptionsDTO::toDomainObject)
                     .orElse(RunningOptions.DEFAULT));
diff --git 
a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTaskDTO.java
 
b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTaskDTO.java
index 2ce86ba..7dcc1c0 100644
--- 
a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTaskDTO.java
+++ 
b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTaskDTO.java
@@ -58,7 +58,13 @@ public class ErrorRecoveryIndexationTaskDTO implements 
TaskDTO {
             .stream()
             
.map(ErrorRecoveryIndexationTaskDTO::failuresByMailboxToReindexingFailureDTO)
             .collect(Guavate.toImmutableList());
-        return new ErrorRecoveryIndexationTaskDTO(type, failureDTOs, 
Optional.of(RunningOptionsDTO.toDTO(task.getRunningOptions())));
+
+        List<String> failureMailboxDTOs = task.getPreviousFailures()
+            .mailboxFailures()
+            .stream()
+            .map(MailboxId::serialize)
+            .collect(Guavate.toImmutableList());
+        return new ErrorRecoveryIndexationTaskDTO(type, failureDTOs, 
Optional.of(failureMailboxDTOs), 
Optional.of(RunningOptionsDTO.toDTO(task.getRunningOptions())));
     }
 
     private static ReindexingFailureDTO 
failuresByMailboxToReindexingFailureDTO(Map.Entry<MailboxId,
@@ -92,14 +98,17 @@ public class ErrorRecoveryIndexationTaskDTO implements 
TaskDTO {
     }
 
     private final String type;
-    private final List<ReindexingFailureDTO> previousFailures;
+    private final List<ReindexingFailureDTO> previousMessageFailures;
+    private final  Optional<List<String>> previousMailboxFailures;
     private final Optional<RunningOptionsDTO> runningOptions;
 
     private ErrorRecoveryIndexationTaskDTO(@JsonProperty("type") String type,
-                                           @JsonProperty("previousFailures") 
List<ReindexingFailureDTO> previousFailures,
+                                           @JsonProperty("previousFailures") 
List<ReindexingFailureDTO> previousMessageFailures,
+                                           
@JsonProperty("previousMailboxFailures") Optional<List<String>> 
previousMailboxFailures,
                                            @JsonProperty("runningOptions") 
Optional<RunningOptionsDTO> runningOptions) {
         this.type = type;
-        this.previousFailures = previousFailures;
+        this.previousMessageFailures = previousMessageFailures;
+        this.previousMailboxFailures = previousMailboxFailures;
         this.runningOptions = runningOptions;
     }
 
@@ -108,8 +117,12 @@ public class ErrorRecoveryIndexationTaskDTO implements 
TaskDTO {
         return type;
     }
 
-    public List<ReindexingFailureDTO> getPreviousFailures() {
-        return previousFailures;
+    public List<ReindexingFailureDTO> getPreviousMessageFailures() {
+        return previousMessageFailures;
+    }
+
+    public  Optional<List<String>> getPreviousMailboxFailures() {
+        return previousMailboxFailures;
     }
 
     public Optional<RunningOptionsDTO> getRunningOptions() {
diff --git 
a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReprocessingContextInformationDTO.java
 
b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReprocessingContextInformationDTO.java
index 5bf65dc..714599d 100644
--- 
a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReprocessingContextInformationDTO.java
+++ 
b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReprocessingContextInformationDTO.java
@@ -35,6 +35,7 @@ import 
org.apache.james.server.task.json.dto.AdditionalInformationDTOModule;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.github.steveash.guavate.Guavate;
+import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableListMultimap;
 
@@ -66,10 +67,12 @@ public class ReprocessingContextInformationDTO implements 
AdditionalInformationD
             DTO(@JsonProperty("type") String type,
                 @JsonProperty("successfullyReprocessedMailCount") int 
successfullyReprocessedMailCount,
                 @JsonProperty("failedReprocessedMailCount") int 
failedReprocessedMailCount,
-                @JsonProperty("failures") List<ReindexingFailureDTO> failures,
+                @JsonProperty("failures") Optional<List<ReindexingFailureDTO>> 
failures,
+                @JsonProperty("messageFailures") 
Optional<List<ReindexingFailureDTO>> messageFailures,
+                @JsonProperty("mailboxFailures") Optional<List<String>> 
mailboxFailures,
                 @JsonProperty("timestamp") Instant timestamp,
                 @JsonProperty("runningOptions") Optional<RunningOptionsDTO> 
runningOptions) {
-                super(type, successfullyReprocessedMailCount, 
failedReprocessedMailCount, failures, timestamp, runningOptions);
+                super(type, successfullyReprocessedMailCount, 
failedReprocessedMailCount, failures, messageFailures, mailboxFailures, 
timestamp, runningOptions);
             }
         }
 
@@ -79,7 +82,7 @@ public class ReprocessingContextInformationDTO implements 
AdditionalInformationD
                 .toDomainObjectConverter(dto -> new 
ReprocessingContextInformationForErrorRecoveryIndexationTask(
                     dto.successfullyReprocessedMailCount,
                     dto.failedReprocessedMailCount,
-                    deserializeFailures(mailboxIdFactory, dto.failures),
+                    deserializeFailures(mailboxIdFactory, dto.messageFailures, 
dto.mailboxFailures.orElse(ImmutableList.of())),
                     dto.getTimestamp(),
                     dto.getRunningOptions()
                         .map(RunningOptionsDTO::toDomainObject)
@@ -89,7 +92,9 @@ public class ReprocessingContextInformationDTO implements 
AdditionalInformationD
                     type,
                     details.getSuccessfullyReprocessedMailCount(),
                     details.getFailedReprocessedMailCount(),
-                    serializeFailures(details.failures()),
+                    Optional.empty(),
+                    Optional.of(serializeFailures(details.failures())),
+                    
Optional.of(details.failures().mailboxFailures().stream().map(MailboxId::serialize).collect(Guavate.toImmutableList())),
                     details.timestamp(),
                     
Optional.of(RunningOptionsDTO.toDTO(details.getRunningOptions()))))
                 
.typeName(ErrorRecoveryIndexationTask.PREVIOUS_FAILURES_INDEXING.asString())
@@ -112,10 +117,12 @@ public class ReprocessingContextInformationDTO implements 
AdditionalInformationD
             DTO(@JsonProperty("type") String type,
                 @JsonProperty("successfullyReprocessedMailCount") int 
successfullyReprocessedMailCount,
                 @JsonProperty("failedReprocessedMailCount") int 
failedReprocessedMailCount,
-                @JsonProperty("failures") List<ReindexingFailureDTO> failures,
+                @JsonProperty("failures") Optional<List<ReindexingFailureDTO>> 
failures,
+                @JsonProperty("messageFailures") 
Optional<List<ReindexingFailureDTO>> messageFailures,
+                @JsonProperty("mailboxFailures") Optional<List<String>> 
mailboxFailures,
                 @JsonProperty("timestamp") Instant timestamp,
                 @JsonProperty("runningOptions") Optional<RunningOptionsDTO> 
runningOptions) {
-                super(type, successfullyReprocessedMailCount, 
failedReprocessedMailCount, failures, timestamp, runningOptions);
+                super(type, successfullyReprocessedMailCount, 
failedReprocessedMailCount, failures, messageFailures, mailboxFailures, 
timestamp, runningOptions);
             }
         }
 
@@ -125,7 +132,7 @@ public class ReprocessingContextInformationDTO implements 
AdditionalInformationD
                 .toDomainObjectConverter(dto -> new 
ReprocessingContextInformationForFullReindexingTask(
                     dto.successfullyReprocessedMailCount,
                     dto.failedReprocessedMailCount,
-                    deserializeFailures(mailboxIdFactory, dto.failures),
+                    deserializeFailures(mailboxIdFactory, dto.messageFailures, 
dto.mailboxFailures.orElse(ImmutableList.of())),
                     dto.getTimestamp(),
                     dto.getRunningOptions()
                         .map(RunningOptionsDTO::toDomainObject)
@@ -134,7 +141,9 @@ public class ReprocessingContextInformationDTO implements 
AdditionalInformationD
                     type,
                     details.getSuccessfullyReprocessedMailCount(),
                     details.getFailedReprocessedMailCount(),
-                    serializeFailures(details.failures()),
+                    Optional.empty(),
+                    Optional.of(serializeFailures(details.failures())),
+                    
Optional.of(details.failures().mailboxFailures().stream().map(MailboxId::serialize).collect(Guavate.toImmutableList())),
                     details.timestamp(),
                     
Optional.of(RunningOptionsDTO.toDTO(details.getRunningOptions()))))
                 .typeName(FullReindexingTask.FULL_RE_INDEXING.asString())
@@ -151,14 +160,18 @@ public class ReprocessingContextInformationDTO implements 
AdditionalInformationD
     }
 
     static ReIndexingExecutionFailures deserializeFailures(MailboxId.Factory 
mailboxIdFactory,
-                                                           
List<ReindexingFailureDTO> failures) {
+                                                           
List<ReindexingFailureDTO> failures,
+                                                           List<String> 
mailboxFailures) {
         List<ReIndexingExecutionFailures.ReIndexingFailure> reIndexingFailures 
= failures
             .stream()
             .flatMap(failuresForMailbox ->
                 getReIndexingFailureStream(mailboxIdFactory, 
failuresForMailbox))
             .collect(Guavate.toImmutableList());
 
-        return new ReIndexingExecutionFailures(reIndexingFailures);
+        return new ReIndexingExecutionFailures(reIndexingFailures,
+            mailboxFailures.stream()
+                .map(mailboxIdFactory::fromString)
+                .collect(Guavate.toImmutableList()));
     }
 
     private static Stream<ReIndexingExecutionFailures.ReIndexingFailure> 
getReIndexingFailureStream(MailboxId.Factory mailboxIdFactory, 
ReindexingFailureDTO failuresForMailbox) {
@@ -192,24 +205,34 @@ public class ReprocessingContextInformationDTO implements 
AdditionalInformationD
             .collect(Guavate.toImmutableList());
     }
 
+    static List<ReindexingFailureDTO> 
resolveFailure(Optional<List<ReindexingFailureDTO>> failures, 
Optional<List<ReindexingFailureDTO>> messageFailures) {
+        Preconditions.checkState(failures.isPresent() ^ 
messageFailures.isPresent(),
+            "Exactly one field 'failures' or 'messageFailures' need to be 
specified");
+
+        return failures.orElseGet(messageFailures::get);
+    }
+
     protected final String type;
     protected final int successfullyReprocessedMailCount;
     protected final int failedReprocessedMailCount;
-    protected final List<ReindexingFailureDTO> failures;
+    protected final List<ReindexingFailureDTO> messageFailures;
+    protected final Optional<List<String>> mailboxFailures;
     protected final Instant timestamp;
     protected final Optional<RunningOptionsDTO> runningOptions;
 
     ReprocessingContextInformationDTO(@JsonProperty("type") String type,
                                       
@JsonProperty("successfullyReprocessedMailCount") int 
successfullyReprocessedMailCount,
                                       
@JsonProperty("failedReprocessedMailCount") int failedReprocessedMailCount,
-                                      @JsonProperty("failures") 
List<ReindexingFailureDTO> failures,
+                                      @JsonProperty("failures") 
Optional<List<ReindexingFailureDTO>> failures,
+                                      @JsonProperty("messageFailures") 
Optional<List<ReindexingFailureDTO>> messageFailures,
+                                      @JsonProperty("mailboxFailures") 
Optional<List<String>> mailboxFailures,
                                       @JsonProperty("timestamp") Instant 
timestamp,
-                                      @JsonProperty("runningOptions") 
Optional<RunningOptionsDTO> runningOptions
-                                      ) {
+                                      @JsonProperty("runningOptions") 
Optional<RunningOptionsDTO> runningOptions) {
         this.type = type;
         this.successfullyReprocessedMailCount = 
successfullyReprocessedMailCount;
         this.failedReprocessedMailCount = failedReprocessedMailCount;
-        this.failures = failures;
+        this.messageFailures = resolveFailure(failures, messageFailures);
+        this.mailboxFailures = mailboxFailures;
         this.timestamp = timestamp;
         this.runningOptions = runningOptions;
     }
@@ -222,8 +245,12 @@ public class ReprocessingContextInformationDTO implements 
AdditionalInformationD
         return failedReprocessedMailCount;
     }
 
-    public List<ReindexingFailureDTO> getFailures() {
-        return failures;
+    public List<ReindexingFailureDTO> getMessageFailures() {
+        return messageFailures;
+    }
+
+    public Optional<List<String>> getMailboxFailures() {
+        return mailboxFailures;
     }
 
     public Instant getTimestamp() {
diff --git 
a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskAdditionalInformationDTO.java
 
b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskAdditionalInformationDTO.java
index ab2bfc8..21950e7 100644
--- 
a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskAdditionalInformationDTO.java
+++ 
b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskAdditionalInformationDTO.java
@@ -30,6 +30,8 @@ import 
org.apache.james.server.task.json.dto.AdditionalInformationDTOModule;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.github.steveash.guavate.Guavate;
+import com.google.common.collect.ImmutableList;
 
 public class SingleMailboxReindexingTaskAdditionalInformationDTO implements 
AdditionalInformationDTO {
 
@@ -39,7 +41,7 @@ public class 
SingleMailboxReindexingTaskAdditionalInformationDTO implements Addi
             .toDomainObjectConverter(dto -> new 
SingleMailboxReindexingTask.AdditionalInformation(factory.fromString(dto.getMailboxId()),
                 dto.getSuccessfullyReprocessedMailCount(),
                 dto.getFailedReprocessedMailCount(),
-                ReprocessingContextInformationDTO.deserializeFailures(factory, 
dto.getFailures()),
+                ReprocessingContextInformationDTO.deserializeFailures(factory, 
dto.getMessageFailures(), dto.getMailboxFailures().orElse(ImmutableList.of())),
                 dto.getTimestamp(),
                 dto.getRunningOptions()
                     .map(RunningOptionsDTO::toDomainObject)
@@ -50,7 +52,9 @@ public class 
SingleMailboxReindexingTaskAdditionalInformationDTO implements Addi
                 details.getMailboxId(),
                 details.getSuccessfullyReprocessedMailCount(),
                 details.getFailedReprocessedMailCount(),
-                
ReprocessingContextInformationDTO.serializeFailures(details.failures()),
+                Optional.empty(),
+                
Optional.of(ReprocessingContextInformationDTO.serializeFailures(details.failures())),
+                
Optional.of(details.failures().mailboxFailures().stream().map(MailboxId::serialize).collect(Guavate.toImmutableList())),
                 details.timestamp(),
                 
Optional.of(RunningOptionsDTO.toDTO(details.getRunningOptions()))
                 ))
@@ -66,14 +70,19 @@ public class 
SingleMailboxReindexingTaskAdditionalInformationDTO implements Addi
                                                                 
@JsonProperty("mailboxId") String mailboxId,
                                                                 
@JsonProperty("successfullyReprocessedMailCount") int 
successfullyReprocessedMailCount,
                                                                 
@JsonProperty("failedReprocessedMailCount") int failedReprocessedMailCount,
-                                                                
@JsonProperty("failures") 
List<ReprocessingContextInformationDTO.ReindexingFailureDTO> failures,
+                                                                
@JsonProperty("failures") 
Optional<List<ReprocessingContextInformationDTO.ReindexingFailureDTO>> failures,
+                                                                
@JsonProperty("messageFailures") 
Optional<List<ReprocessingContextInformationDTO.ReindexingFailureDTO>> 
messageFailures,
+                                                                
@JsonProperty("mailboxFailures") Optional<List<String>> mailboxFailures,
                                                                 
@JsonProperty("timestamp") Instant timestamp,
                                                                 
@JsonProperty("runningOptions") Optional<RunningOptionsDTO> runningOptions) {
         this.mailboxId = mailboxId;
         this.reprocessingContextInformationDTO = new 
ReprocessingContextInformationDTO(
             type,
             successfullyReprocessedMailCount,
-            failedReprocessedMailCount, failures,
+            failedReprocessedMailCount,
+            failures,
+            messageFailures,
+            mailboxFailures,
             timestamp,
             runningOptions);
     }
@@ -99,8 +108,12 @@ public class 
SingleMailboxReindexingTaskAdditionalInformationDTO implements Addi
         return 
reprocessingContextInformationDTO.getFailedReprocessedMailCount();
     }
 
-    public List<ReprocessingContextInformationDTO.ReindexingFailureDTO> 
getFailures() {
-        return reprocessingContextInformationDTO.getFailures();
+    public List<ReprocessingContextInformationDTO.ReindexingFailureDTO> 
getMessageFailures() {
+        return reprocessingContextInformationDTO.getMessageFailures();
+    }
+
+    public Optional<List<String>> getMailboxFailures() {
+        return reprocessingContextInformationDTO.getMailboxFailures();
     }
 
     public Optional<RunningOptionsDTO> getRunningOptions() {
diff --git 
a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTaskAdditionalInformationDTO.java
 
b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTaskAdditionalInformationDTO.java
index b76efe9..220a7f0 100644
--- 
a/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTaskAdditionalInformationDTO.java
+++ 
b/mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTaskAdditionalInformationDTO.java
@@ -28,9 +28,12 @@ import org.apache.james.mailbox.indexer.ReIndexer;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.server.task.json.dto.AdditionalInformationDTO;
 import org.apache.james.server.task.json.dto.AdditionalInformationDTOModule;
+import 
org.apache.mailbox.tools.indexer.ReprocessingContextInformationDTO.ReindexingFailureDTO;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.github.steveash.guavate.Guavate;
+import com.google.common.collect.ImmutableList;
 
 public class UserReindexingTaskAdditionalInformationDTO implements 
AdditionalInformationDTO {
 
@@ -40,7 +43,7 @@ public class UserReindexingTaskAdditionalInformationDTO 
implements AdditionalInf
             .toDomainObjectConverter(dto -> new 
UserReindexingTask.AdditionalInformation(Username.of(dto.getUser()),
                 dto.getSuccessfullyReprocessedMailCount(),
                 dto.getFailedReprocessedMailCount(),
-                ReprocessingContextInformationDTO.deserializeFailures(factory, 
dto.getFailures()),
+                ReprocessingContextInformationDTO.deserializeFailures(factory, 
dto.getMessageFailures(), dto.getMailboxFailures().orElse(ImmutableList.of())),
                 dto.getTimestamp(),
                 dto.getRunningOptions()
                     .map(RunningOptionsDTO::toDomainObject)
@@ -51,10 +54,11 @@ public class UserReindexingTaskAdditionalInformationDTO 
implements AdditionalInf
                 details.getUsername(),
                 details.getSuccessfullyReprocessedMailCount(),
                 details.getFailedReprocessedMailCount(),
-                
ReprocessingContextInformationDTO.serializeFailures(details.failures()),
+                Optional.empty(),
+                
Optional.of(ReprocessingContextInformationDTO.serializeFailures(details.failures())),
+                
Optional.of(details.failures().mailboxFailures().stream().map(MailboxId::serialize).collect(Guavate.toImmutableList())),
                 details.timestamp(),
-                
Optional.of(RunningOptionsDTO.toDTO(details.getRunningOptions()))
-                ))
+                
Optional.of(RunningOptionsDTO.toDTO(details.getRunningOptions()))))
             .typeName(UserReindexingTask.USER_RE_INDEXING.asString())
             .withFactory(AdditionalInformationDTOModule::new);
     }
@@ -67,7 +71,9 @@ public class UserReindexingTaskAdditionalInformationDTO 
implements AdditionalInf
                                                        @JsonProperty("user") 
String user,
                                                        
@JsonProperty("successfullyReprocessedMailCount") int 
successfullyReprocessedMailCount,
                                                        
@JsonProperty("failedReprocessedMailCount") int failedReprocessedMailCount,
-                                                       
@JsonProperty("failures") 
List<ReprocessingContextInformationDTO.ReindexingFailureDTO> failures,
+                                                       
@JsonProperty("failures") Optional<List<ReindexingFailureDTO>> failures,
+                                                       
@JsonProperty("messageFailures") Optional<List<ReindexingFailureDTO>> 
messageFailures,
+                                                       
@JsonProperty("mailboxFailures") Optional<List<String>> mailboxFailures,
                                                        
@JsonProperty("timestamp") Instant timestamp,
                                                        
@JsonProperty("runningOptions") Optional<RunningOptionsDTO> runningOptions
                                                        ) {
@@ -76,6 +82,8 @@ public class UserReindexingTaskAdditionalInformationDTO 
implements AdditionalInf
             successfullyReprocessedMailCount,
             failedReprocessedMailCount,
             failures,
+            messageFailures,
+            mailboxFailures,
             timestamp,
             runningOptions);
     }
@@ -101,8 +109,12 @@ public class UserReindexingTaskAdditionalInformationDTO 
implements AdditionalInf
         return 
reprocessingContextInformationDTO.getFailedReprocessedMailCount();
     }
 
-    public List<ReprocessingContextInformationDTO.ReindexingFailureDTO> 
getFailures() {
-        return reprocessingContextInformationDTO.getFailures();
+    public List<ReindexingFailureDTO> getMessageFailures() {
+        return reprocessingContextInformationDTO.getMessageFailures();
+    }
+
+    public Optional<List<String>> getMailboxFailures() {
+        return reprocessingContextInformationDTO.getMailboxFailures();
     }
 
     public Optional<RunningOptionsDTO> getRunningOptions() {
diff --git 
a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTaskSerializationTest.java
 
b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTaskSerializationTest.java
index 929d34c..05ba84d 100644
--- 
a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTaskSerializationTest.java
+++ 
b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTaskSerializationTest.java
@@ -43,19 +43,20 @@ class ErrorRecoveryIndexationTaskSerializationTest {
     private final int successfullyReprocessedMailCount = 42;
     private final int failedReprocessedMailCount = 2;
     private final String serializedErrorRecoveryReindexingTask = "{\"type\": 
\"error-recovery-indexation\"," +
-        " \"previousFailures\" : 
[{\"mailboxId\":\"1\",\"uids\":[10]},{\"mailboxId\":\"2\",\"uids\":[20]}], 
\"runningOptions\":{\"messagesPerSecond\":50}}";
+        " \"previousMessageFailures\" : 
[{\"mailboxId\":\"1\",\"uids\":[10]},{\"mailboxId\":\"2\",\"uids\":[20]}], 
\"previousMailboxFailures\": [\"3\"], 
\"runningOptions\":{\"messagesPerSecond\":50}}";
     private final String legacySerializedErrorRecoveryReindexingTask = 
"{\"type\": \"error-recovery-indexation\"," +
         " \"previousFailures\" : 
[{\"mailboxId\":\"1\",\"uids\":[10]},{\"mailboxId\":\"2\",\"uids\":[20]}]}";
-    private final String serializedAdditionalInformation = "{\"type\": 
\"error-recovery-indexation\", 
\"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":[{\"mailboxId\":\"1\",\"uids\":[10]},{\"mailboxId\":\"2\",\"uids\":[20]}],
 \"timestamp\":\"2018-11-13T12:00:55Z\", 
\"runningOptions\":{\"messagesPerSecond\":50}}";
+    private final String serializedAdditionalInformation = "{\"type\": 
\"error-recovery-indexation\", 
\"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"messageFailures\":[{\"mailboxId\":\"1\",\"uids\":[10]},{\"mailboxId\":\"2\",\"uids\":[20]}],
 \"mailboxFailures\":[\"3\"], \"timestamp\":\"2018-11-13T12:00:55Z\", 
\"runningOptions\":{\"messagesPerSecond\":50}}";
     private final String legacySerializedAdditionalInformation = "{\"type\": 
\"error-recovery-indexation\", 
\"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":[{\"mailboxId\":\"1\",\"uids\":[10]},{\"mailboxId\":\"2\",\"uids\":[20]}],
 \"timestamp\":\"2018-11-13T12:00:55Z\"}";
     private final TestId mailboxId = TestId.of(1L);
     private final MessageUid messageUid = MessageUid.of(10L);
     private final ReIndexingExecutionFailures.ReIndexingFailure 
indexingFailure = new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId, 
messageUid);
     private final TestId mailboxId2 = TestId.of(2L);
     private final MessageUid messageUid2 = MessageUid.of(20L);
+    private final TestId mailboxId3 = TestId.of(3L);
     private final ReIndexingExecutionFailures.ReIndexingFailure 
indexingFailure2 = new 
ReIndexingExecutionFailures.ReIndexingFailure(mailboxId2, messageUid2);
     private final List<ReIndexingExecutionFailures.ReIndexingFailure> failures 
= ImmutableList.of(indexingFailure, indexingFailure2);
-    private final ReIndexingExecutionFailures executionFailures = new 
ReIndexingExecutionFailures(failures);
+    private final ReIndexingExecutionFailures executionFailures = new 
ReIndexingExecutionFailures(failures, ImmutableList.of(mailboxId3));
 
     private ErrorRecoveryIndexationTask.Factory factory;
     private ReIndexerPerformer reIndexerPerformer;
@@ -75,12 +76,12 @@ class ErrorRecoveryIndexationTaskSerializationTest {
     }
 
     @Test
-    void legacyTaskshouldBeDeserializable() throws Exception {
+    void legacyTaskShouldBeDeserializable() throws Exception {
         ErrorRecoveryIndexationTask legacyTask = 
JsonGenericSerializer.forModules(ErrorRecoveryIndexationTaskDTO.module(factory))
             .withoutNestedType()
             .deserialize(legacySerializedErrorRecoveryReindexingTask);
 
-        ErrorRecoveryIndexationTask expected = new 
ErrorRecoveryIndexationTask(reIndexerPerformer, executionFailures, 
RunningOptions.DEFAULT);
+        ErrorRecoveryIndexationTask expected = new 
ErrorRecoveryIndexationTask(reIndexerPerformer, new 
ReIndexingExecutionFailures(failures, ImmutableList.of()), 
RunningOptions.DEFAULT);
 
         assertThat(legacyTask)
             .isEqualToComparingFieldByFieldRecursively(expected);
@@ -104,7 +105,7 @@ class ErrorRecoveryIndexationTaskSerializationTest {
         
ReprocessingContextInformationDTO.ReprocessingContextInformationForFullReindexingTask
 expected = new 
ReprocessingContextInformationDTO.ReprocessingContextInformationForFullReindexingTask(
             42,
             2,
-            executionFailures,
+            new ReIndexingExecutionFailures(failures, ImmutableList.of()),
             TIMESTAMP,
             RunningOptions.DEFAULT
         );
diff --git 
a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/FullReindexingTaskSerializationTest.java
 
b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/FullReindexingTaskSerializationTest.java
index 5842e3e..49b3511 100644
--- 
a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/FullReindexingTaskSerializationTest.java
+++ 
b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/FullReindexingTaskSerializationTest.java
@@ -38,10 +38,11 @@ import com.google.common.collect.ImmutableList;
 class FullReindexingTaskSerializationTest {
     private static final Instant TIMESTAMP = 
Instant.parse("2018-11-13T12:00:55Z");
 
-    private final TestId mailboxId2 = TestId.of(2L);
-    private final MessageUid messageUid2 = MessageUid.of(20L);
     private final TestId mailboxId = TestId.of(1L);
     private final MessageUid messageUid = MessageUid.of(10L);
+    private final TestId mailboxId2 = TestId.of(2L);
+    private final MessageUid messageUid2 = MessageUid.of(20L);
+    private final TestId mailboxId3 = TestId.of(3L);
 
     private final int successfullyReprocessedMailCount = 42;
     private final int failedReprocessedMailCount = 2;
@@ -49,7 +50,7 @@ class FullReindexingTaskSerializationTest {
     private final String serializedFullReindexingTask = 
"{\"type\":\"full-reindexing\", \"runningOptions\":{\"messagesPerSecond\":50}}";
     private final String legacySerializedFullReindexingTask = 
"{\"type\":\"full-reindexing\"}";
 
-    private final String serializedAdditionalInformation = "{\"type\": 
\"full-reindexing\", \"runningOptions\":{\"messagesPerSecond\":50}, 
\"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":[{\"mailboxId\":\"1\",\"uids\":[10]},{\"mailboxId\":\"2\",\"uids\":[20]}],
 \"timestamp\":\"2018-11-13T12:00:55Z\"}";
+    private final String serializedAdditionalInformation = "{\"type\": 
\"full-reindexing\", \"runningOptions\":{\"messagesPerSecond\":50}, 
\"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"messageFailures\":[{\"mailboxId\":\"1\",\"uids\":[10]},{\"mailboxId\":\"2\",\"uids\":[20]}],
 \"mailboxFailures\": [\"3\"],\"timestamp\":\"2018-11-13T12:00:55Z\"}";
     private final String legacySerializedAdditionalInformation = "{\"type\": 
\"full-reindexing\", 
\"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":[{\"mailboxId\":\"1\",\"uids\":[10]},{\"mailboxId\":\"2\",\"uids\":[20]}],
 \"timestamp\":\"2018-11-13T12:00:55Z\"}";
 
     private ReIndexingExecutionFailures reIndexingExecutionFailures;
@@ -60,8 +61,9 @@ class FullReindexingTaskSerializationTest {
         reIndexerPerformer = mock(ReIndexerPerformer.class);
 
         reIndexingExecutionFailures = new 
ReIndexingExecutionFailures(ImmutableList.of(
-            new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId, 
messageUid),
-            new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId2, 
messageUid2)));
+                new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId, 
messageUid),
+                new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId2, 
messageUid2)),
+            ImmutableList.of(mailboxId3));
     }
 
     @Test
@@ -103,7 +105,9 @@ class FullReindexingTaskSerializationTest {
         ReprocessingContextInformationForFullReindexingTask expected = new 
ReprocessingContextInformationForFullReindexingTask(
             42,
             2,
-            reIndexingExecutionFailures,
+            new ReIndexingExecutionFailures(ImmutableList.of(
+            new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId, 
messageUid),
+            new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId2, 
messageUid2)), ImmutableList.of()),
             TIMESTAMP,
             RunningOptions.DEFAULT
         );
diff --git 
a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SerializableReIndexingExecutionFailuresTest.java
 
b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SerializableReIndexingExecutionFailuresTest.java
index 147032f..5ef546a 100644
--- 
a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SerializableReIndexingExecutionFailuresTest.java
+++ 
b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SerializableReIndexingExecutionFailuresTest.java
@@ -44,7 +44,7 @@ class SerializableReIndexingExecutionFailuresTest {
 
     @Test
     void failuresShouldBeSerializedAsEmptyArrayWhenNone() throws Exception {
-        ReIndexingExecutionFailures failures = new 
ReIndexingExecutionFailures(ImmutableList.of());
+        ReIndexingExecutionFailures failures = new 
ReIndexingExecutionFailures(ImmutableList.of(), ImmutableList.of());
 
         
assertThatJson(objectMapper.writeValueAsString(SerializableReIndexingExecutionFailures.from(failures)))
             .when(Option.IGNORING_ARRAY_ORDER)
@@ -59,7 +59,7 @@ class SerializableReIndexingExecutionFailuresTest {
             new 
ReIndexingExecutionFailures.ReIndexingFailure(InMemoryId.of(44), 
MessageUid.of(31)),
             new 
ReIndexingExecutionFailures.ReIndexingFailure(InMemoryId.of(44), 
MessageUid.of(34)),
             new 
ReIndexingExecutionFailures.ReIndexingFailure(InMemoryId.of(41), 
MessageUid.of(18)),
-            new 
ReIndexingExecutionFailures.ReIndexingFailure(InMemoryId.of(16), 
MessageUid.of(24))));
+            new 
ReIndexingExecutionFailures.ReIndexingFailure(InMemoryId.of(16), 
MessageUid.of(24))), ImmutableList.of());
 
         
assertThatJson(objectMapper.writeValueAsString(SerializableReIndexingExecutionFailures.from(failures)))
             .when(Option.IGNORING_ARRAY_ORDER)
diff --git 
a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskSerializationTest.java
 
b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskSerializationTest.java
index f0462d0..3e1028a 100644
--- 
a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskSerializationTest.java
+++ 
b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskSerializationTest.java
@@ -42,10 +42,11 @@ class SingleMailboxReindexingTaskSerializationTest {
 
     private final String serializedMailboxReindexingTask = "{\"type\": 
\"mailbox-reindexing\", \"mailboxId\": \"1\", 
\"runningOptions\":{\"messagesPerSecond\":50}}";
     private final String legacySerializedMailboxReindexingTask = "{\"type\": 
\"mailbox-reindexing\", \"mailboxId\": \"1\"}";
-    private final String serializedAdditionalInformation = "{\"type\": 
\"mailbox-reindexing\", \"mailboxId\": \"1\", 
\"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":[{\"mailboxId\":\"1\",\"uids\":[10,
 20]}], \"timestamp\":\"2018-11-13T12:00:55Z\", 
\"runningOptions\":{\"messagesPerSecond\":50}}";
+    private final String serializedAdditionalInformation = "{\"type\": 
\"mailbox-reindexing\", \"mailboxId\": \"1\", 
\"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"messageFailures\":[{\"mailboxId\":\"1\",\"uids\":[10,
 20]}], \"mailboxFailures\": [\"2\"],\"timestamp\":\"2018-11-13T12:00:55Z\", 
\"runningOptions\":{\"messagesPerSecond\":50}}";
     private final String legacySerializedAdditionalInformation = "{\"type\": 
\"mailbox-reindexing\", \"mailboxId\": \"1\", 
\"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":[{\"mailboxId\":\"1\",\"uids\":[10,
 20]}], \"timestamp\":\"2018-11-13T12:00:55Z\"}";
 
     private final TestId mailboxId = TestId.of(1L);
+    private final TestId mailboxId2 = TestId.of(2L);
     private final MessageUid messageUid = MessageUid.of(10L);
     private final MessageUid messageUid2 = MessageUid.of(20L);
 
@@ -59,7 +60,8 @@ class SingleMailboxReindexingTaskSerializationTest {
         factory = new SingleMailboxReindexingTask.Factory(reIndexerPerformer, 
new TestId.Factory());
         reIndexingExecutionFailures = new 
ReIndexingExecutionFailures(ImmutableList.of(
             new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId, 
messageUid),
-            new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId, 
messageUid2)));
+            new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId, 
messageUid2)),
+        ImmutableList.of(mailboxId2));
     }
 
     @Test
@@ -102,7 +104,10 @@ class SingleMailboxReindexingTaskSerializationTest {
             mailboxId,
             42,
             2,
-            reIndexingExecutionFailures,
+            new ReIndexingExecutionFailures(ImmutableList.of(
+                new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId, 
messageUid),
+                new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId, 
messageUid2)),
+                ImmutableList.of()),
             TIMESTAMP,
             RunningOptions.DEFAULT
         );
diff --git 
a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/UserReindexingTaskSerializationTest.java
 
b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/UserReindexingTaskSerializationTest.java
index bcdcc3b..84c9efd 100644
--- 
a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/UserReindexingTaskSerializationTest.java
+++ 
b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/UserReindexingTaskSerializationTest.java
@@ -43,12 +43,13 @@ class UserReindexingTaskSerializationTest {
     private final int failedReprocessedMailCount = 2;
     private final String serializedUserReindexingTask = "{\"type\": 
\"user-reindexing\", \"username\": \"f...@apache.org\", 
\"runningOptions\":{\"messagesPerSecond\":50}}";
     private final String legacySerializedUserReindexingTask = "{\"type\": 
\"user-reindexing\", \"username\": \"f...@apache.org\"}";
-    private final String serializedAdditionalInformation = "{\"type\": 
\"user-reindexing\", \"user\": \"f...@apache.org\", 
\"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":[{\"mailboxId\":\"1\",\"uids\":[10]},{\"mailboxId\":\"2\",\"uids\":[20]}],
 \"timestamp\":\"2018-11-13T12:00:55Z\", 
\"runningOptions\":{\"messagesPerSecond\":50}}";
+    private final String serializedAdditionalInformation = "{\"type\": 
\"user-reindexing\", \"user\": \"f...@apache.org\", 
\"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"messageFailures\":[{\"mailboxId\":\"1\",\"uids\":[10]},{\"mailboxId\":\"2\",\"uids\":[20]}],\"mailboxFailures\":[\"3\"],
 \"timestamp\":\"2018-11-13T12:00:55Z\", 
\"runningOptions\":{\"messagesPerSecond\":50}}";
     private final String legacySerializedAdditionalInformation = "{\"type\": 
\"user-reindexing\", \"user\": \"f...@apache.org\", 
\"successfullyReprocessedMailCount\":42,\"failedReprocessedMailCount\":2,\"failures\":[{\"mailboxId\":\"1\",\"uids\":[10]},{\"mailboxId\":\"2\",\"uids\":[20]}],
 \"timestamp\":\"2018-11-13T12:00:55Z\"}";
     private final TestId mailboxId = TestId.of(1L);
     private final MessageUid messageUid = MessageUid.of(10L);
     private final TestId mailboxId2 = TestId.of(2L);
     private final MessageUid messageUid2 = MessageUid.of(20L);
+    private final TestId mailboxId3 = TestId.of(3L);
 
     private ReIndexerPerformer reIndexerPerformer;
     private UserReindexingTask.Factory factory;
@@ -60,8 +61,9 @@ class UserReindexingTaskSerializationTest {
         factory = new UserReindexingTask.Factory(reIndexerPerformer);
 
         reIndexingExecutionFailures = new 
ReIndexingExecutionFailures(ImmutableList.of(
-            new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId, 
messageUid),
-            new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId2, 
messageUid2)));
+                new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId, 
messageUid),
+                new ReIndexingExecutionFailures.ReIndexingFailure(mailboxId2, 
messageUid2)),
+            ImmutableList.of(mailboxId3));
     }
 
     @Test
@@ -103,7 +105,10 @@ class UserReindexingTaskSerializationTest {
             USERNAME,
             42,
             2,
-            reIndexingExecutionFailures,
+            new ReIndexingExecutionFailures(ImmutableList.of(
+                    new 
ReIndexingExecutionFailures.ReIndexingFailure(mailboxId, messageUid),
+                    new 
ReIndexingExecutionFailures.ReIndexingFailure(mailboxId2, messageUid2)),
+                ImmutableList.of()),
             TIMESTAMP,
             RunningOptions.DEFAULT
         );


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

Reply via email to