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 rc...@apache.org on 2020/03/06 03:07:18 UTC

[james-project] 17/21: JAMES-3058 Fixed mailbox in solveInconsistencies task execution report

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 1616ebaffdf60dccb4c3a627437ea5d0ca879e9e
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Wed Feb 19 15:36:29 2020 +0700

    JAMES-3058 Fixed mailbox in solveInconsistencies task execution report
---
 .../task/SolveMailboxInconsistenciesService.java   | 41 ++++++++++++----------
 .../mail/task/SolveMailboxInconsistenciesTask.java | 12 ++++---
 ...nconsistenciesTaskAdditionalInformationDTO.java |  6 ++--
 .../SolveMailboxInconsistenciesServiceTest.java    |  9 ++---
 ...ailboxInconsistenciesTaskSerializationTest.java |  7 ++--
 5 files changed, 40 insertions(+), 35 deletions(-)

diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesService.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesService.java
index 7176713..b740233 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesService.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesService.java
@@ -34,6 +34,7 @@ import org.apache.james.mailbox.cassandra.mail.CassandraIdAndPath;
 import org.apache.james.mailbox.cassandra.mail.CassandraMailboxDAO;
 import org.apache.james.mailbox.cassandra.mail.CassandraMailboxPathV2DAO;
 import org.apache.james.mailbox.model.Mailbox;
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.task.Task;
 import org.apache.james.task.Task.Result;
 import org.slf4j.Logger;
@@ -94,7 +95,7 @@ public class SolveMailboxInconsistenciesService {
             LOGGER.info("Inconsistency fixed for orphan mailbox {} - {}",
                 mailbox.getMailboxId().serialize(),
                 mailbox.generateAssociatedPath().asString());
-            context.incrementFixedInconsistencies();
+            context.addFixedInconsistency(mailbox.getMailboxId());
         }
     }
 
@@ -124,7 +125,7 @@ public class SolveMailboxInconsistenciesService {
                     LOGGER.info("Inconsistency fixed for orphan mailboxPath {} - {}",
                         pathRegistration.getCassandraId().serialize(),
                         pathRegistration.getMailboxPath().asString());
-                    context.incrementFixedInconsistencies();
+                    context.addFixedInconsistency(pathRegistration.getCassandraId());
                 })
                 .map(any -> Result.COMPLETED)
                 .switchIfEmpty(Mono.just(Result.COMPLETED))
@@ -177,13 +178,13 @@ public class SolveMailboxInconsistenciesService {
         static class Builder {
             private Optional<Long> processedMailboxEntries;
             private Optional<Long> processedMailboxPathEntries;
-            private Optional<Long> fixedInconsistencies;
+            private ImmutableList.Builder<MailboxId>  fixedInconsistencies;
             private ImmutableList.Builder<ConflictingEntry> conflictingEntries;
             private Optional<Long> errors;
 
             Builder() {
                 processedMailboxPathEntries = Optional.empty();
-                fixedInconsistencies = Optional.empty();
+                fixedInconsistencies = ImmutableList.builder();
                 conflictingEntries = ImmutableList.builder();
                 errors = Optional.empty();
                 processedMailboxEntries = Optional.empty();
@@ -199,8 +200,8 @@ public class SolveMailboxInconsistenciesService {
                 return this;
             }
 
-            public Builder fixedInconsistencies(long count) {
-                fixedInconsistencies = Optional.of(count);
+            public Builder addFixedInconsistencies(MailboxId mailboxId) {
+                fixedInconsistencies.add(mailboxId);
                 return this;
             }
 
@@ -218,7 +219,7 @@ public class SolveMailboxInconsistenciesService {
                 return new Context(
                     processedMailboxEntries.orElse(0L),
                     processedMailboxPathEntries.orElse(0L),
-                    fixedInconsistencies.orElse(0L),
+                    fixedInconsistencies.build(),
                     conflictingEntries.build(),
                     errors.orElse(0L));
             }
@@ -231,11 +232,13 @@ public class SolveMailboxInconsistenciesService {
         static class Snapshot {
             private final long processedMailboxEntries;
             private final long processedMailboxPathEntries;
-            private final long fixedInconsistencies;
+            private final ImmutableList<MailboxId> fixedInconsistencies;
             private final ImmutableList<ConflictingEntry> conflictingEntries;
             private final long errors;
 
-            private Snapshot(long processedMailboxEntries, long processedMailboxPathEntries, long fixedInconsistencies, ImmutableList<ConflictingEntry> conflictingEntries, long errors) {
+            private Snapshot(long processedMailboxEntries, long processedMailboxPathEntries,
+                             ImmutableList<MailboxId> fixedInconsistencies,
+                             ImmutableList<ConflictingEntry> conflictingEntries, long errors) {
                 this.processedMailboxEntries = processedMailboxEntries;
                 this.processedMailboxPathEntries = processedMailboxPathEntries;
                 this.fixedInconsistencies = fixedInconsistencies;
@@ -251,7 +254,7 @@ public class SolveMailboxInconsistenciesService {
                 return processedMailboxPathEntries;
             }
 
-            long getFixedInconsistencies() {
+            ImmutableList<MailboxId> getFixedInconsistencies() {
                 return fixedInconsistencies;
             }
 
@@ -296,26 +299,26 @@ public class SolveMailboxInconsistenciesService {
 
         private final AtomicLong processedMailboxEntries;
         private final AtomicLong processedMailboxPathEntries;
-        private final AtomicLong fixedInconsistencies;
+        private final ConcurrentLinkedDeque<MailboxId> fixedInconsistencies;
         private final ConcurrentLinkedDeque<ConflictingEntry> conflictingEntries;
         private final AtomicLong errors;
 
         Context() {
-            this(new AtomicLong(), new AtomicLong(), new AtomicLong(), ImmutableList.of(), new AtomicLong());
+            this(new AtomicLong(), new AtomicLong(), ImmutableList.of(), ImmutableList.of(), new AtomicLong());
         }
 
-        Context(long processedMailboxEntries, long processedMailboxPathEntries, long fixedInconsistencies, Collection<ConflictingEntry> conflictingEntries, long errors) {
+        Context(long processedMailboxEntries, long processedMailboxPathEntries, Collection<MailboxId> fixedInconsistencies, Collection<ConflictingEntry> conflictingEntries, long errors) {
             this(new AtomicLong(processedMailboxEntries),
                 new AtomicLong(processedMailboxPathEntries),
-                new AtomicLong(fixedInconsistencies),
+                fixedInconsistencies,
                 conflictingEntries,
                 new AtomicLong(errors));
         }
 
-        private Context(AtomicLong processedMailboxEntries, AtomicLong processedMailboxPathEntries, AtomicLong fixedInconsistencies, Collection<ConflictingEntry> conflictingEntries, AtomicLong errors) {
+        private Context(AtomicLong processedMailboxEntries, AtomicLong processedMailboxPathEntries, Collection<MailboxId> fixedInconsistencies, Collection<ConflictingEntry> conflictingEntries, AtomicLong errors) {
             this.processedMailboxEntries = processedMailboxEntries;
             this.processedMailboxPathEntries = processedMailboxPathEntries;
-            this.fixedInconsistencies = fixedInconsistencies;
+            this.fixedInconsistencies = new ConcurrentLinkedDeque<>(fixedInconsistencies);
             this.conflictingEntries = new ConcurrentLinkedDeque<>(conflictingEntries);
             this.errors = errors;
         }
@@ -328,8 +331,8 @@ public class SolveMailboxInconsistenciesService {
             processedMailboxPathEntries.incrementAndGet();
         }
 
-        void incrementFixedInconsistencies() {
-            fixedInconsistencies.incrementAndGet();
+        void addFixedInconsistency(MailboxId mailboxId) {
+            fixedInconsistencies.add(mailboxId);
         }
 
         void addConflictingEntries(ConflictingEntry conflictingEntry) {
@@ -344,7 +347,7 @@ public class SolveMailboxInconsistenciesService {
             return new Snapshot(
                 processedMailboxEntries.get(),
                 processedMailboxPathEntries.get(),
-                fixedInconsistencies.get(),
+                ImmutableList.copyOf(fixedInconsistencies),
                 ImmutableList.copyOf(conflictingEntries),
                 errors.get());
         }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesTask.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesTask.java
index 8cbb7e8..2139d25 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesTask.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesTask.java
@@ -23,6 +23,7 @@ import java.time.Clock;
 import java.time.Instant;
 import java.util.Optional;
 
+import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.task.Task;
 import org.apache.james.task.TaskExecutionDetails;
 import org.apache.james.task.TaskType;
@@ -30,6 +31,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.github.steveash.guavate.Guavate;
 import com.google.common.collect.ImmutableList;
 
 public class SolveMailboxInconsistenciesTask implements Task {
@@ -41,11 +43,11 @@ public class SolveMailboxInconsistenciesTask implements Task {
         private final Instant instant;
         private final long processedMailboxEntries;
         private final long processedMailboxPathEntries;
-        private final long fixedInconsistencies;
+        private final ImmutableList<String> fixedInconsistencies;
         private final ImmutableList<ConflictingEntry> conflictingEntries;
         private final long errors;
 
-        Details(Instant instant, long processedMailboxEntries, long processedMailboxPathEntries, long fixedInconsistencies,
+        Details(Instant instant, long processedMailboxEntries, long processedMailboxPathEntries, ImmutableList<String> fixedInconsistencies,
                 ImmutableList<ConflictingEntry> conflictingEntries, long errors) {
             this.instant = instant;
             this.processedMailboxEntries = processedMailboxEntries;
@@ -71,7 +73,7 @@ public class SolveMailboxInconsistenciesTask implements Task {
         }
 
         @JsonProperty("fixedInconsistencies")
-        long getFixedInconsistencies() {
+        ImmutableList<String> getFixedInconsistencies() {
             return fixedInconsistencies;
         }
 
@@ -110,7 +112,9 @@ public class SolveMailboxInconsistenciesTask implements Task {
         return Optional.of(new Details(Clock.systemUTC().instant(),
             snapshot.getProcessedMailboxEntries(),
             snapshot.getProcessedMailboxPathEntries(),
-            snapshot.getFixedInconsistencies(),
+            snapshot.getFixedInconsistencies().stream()
+                .map(MailboxId::serialize)
+                .collect(Guavate.toImmutableList()),
             snapshot.getConflictingEntries(),
             snapshot.getErrors()));
     }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesTaskAdditionalInformationDTO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesTaskAdditionalInformationDTO.java
index b23792b..d74e706 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesTaskAdditionalInformationDTO.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesTaskAdditionalInformationDTO.java
@@ -52,7 +52,7 @@ public class SolveMailboxInconsistenciesTaskAdditionalInformationDTO implements
     private final String type;
     private final long processedMailboxEntries;
     private final long processedMailboxPathEntries;
-    private final long fixedInconsistencies;
+    private final ImmutableList<String> fixedInconsistencies;
     private final ImmutableList<ConflictingEntry> conflictingEntries;
     private final long errors;
     private final Instant timestamp;
@@ -60,7 +60,7 @@ public class SolveMailboxInconsistenciesTaskAdditionalInformationDTO implements
     public SolveMailboxInconsistenciesTaskAdditionalInformationDTO(@JsonProperty("type") String type,
                                                                    @JsonProperty("processedMailboxEntries") long processedMailboxEntries,
                                                                    @JsonProperty("processedMailboxPathEntries") long processedMailboxPathEntries,
-                                                                   @JsonProperty("fixedInconsistencies") long fixedInconsistencies,
+                                                                   @JsonProperty("fixedInconsistencies") ImmutableList<String> fixedInconsistencies,
                                                                    @JsonProperty("conflictingEntries") ImmutableList<ConflictingEntry> conflictingEntries,
                                                                    @JsonProperty("errors") long errors,
                                                                    @JsonProperty("timestamp") Instant timestamp) {
@@ -81,7 +81,7 @@ public class SolveMailboxInconsistenciesTaskAdditionalInformationDTO implements
         return processedMailboxPathEntries;
     }
 
-    public long getFixedInconsistencies() {
+    public ImmutableList<String> getFixedInconsistencies() {
         return fixedInconsistencies;
     }
 
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesServiceTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesServiceTest.java
index 6db7ae0..804d6f9 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesServiceTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesServiceTest.java
@@ -47,8 +47,6 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.RegisterExtension;
 
-import nl.jqno.equalsverifier.EqualsVerifier;
-
 class SolveMailboxInconsistenciesServiceTest {
     private static final UidValidity UID_VALIDITY_1 = UidValidity.ofValid(145);
     private static final UidValidity UID_VALIDITY_2 = UidValidity.ofValid(147);
@@ -203,7 +201,7 @@ class SolveMailboxInconsistenciesServiceTest {
         assertThat(context.snapshot())
             .isEqualTo(Context.builder()
                 .processedMailboxEntries(1)
-                .fixedInconsistencies(1)
+                .addFixedInconsistencies(MAILBOX.getMailboxId())
                 .build()
                 .snapshot());
     }
@@ -218,7 +216,7 @@ class SolveMailboxInconsistenciesServiceTest {
         assertThat(context.snapshot())
             .isEqualTo(Context.builder()
                 .processedMailboxPathEntries(1)
-                .fixedInconsistencies(1)
+                .addFixedInconsistencies(CASSANDRA_ID_1)
                 .build()
                 .snapshot());
     }
@@ -236,7 +234,6 @@ class SolveMailboxInconsistenciesServiceTest {
             .isEqualTo(Context.builder()
                 .processedMailboxEntries(2)
                 .processedMailboxPathEntries(1)
-                .fixedInconsistencies(0)
                 .addConflictingEntry(ConflictingEntry.builder()
                     .mailboxDaoEntry(MAILBOX)
                     .mailboxPathDaoEntry(MAILBOX_PATH, CASSANDRA_ID_2))
@@ -256,7 +253,7 @@ class SolveMailboxInconsistenciesServiceTest {
             .isEqualTo(Context.builder()
                 .processedMailboxEntries(1)
                 .processedMailboxPathEntries(1)
-                .fixedInconsistencies(1)
+                .addFixedInconsistencies(CASSANDRA_ID_1)
                 .addConflictingEntry(ConflictingEntry.builder()
                     .mailboxDaoEntry(MAILBOX)
                     .mailboxPathDaoEntry(NEW_MAILBOX_PATH, CASSANDRA_ID_1))
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesTaskSerializationTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesTaskSerializationTest.java
index 0ec35ca..f490060 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesTaskSerializationTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesTaskSerializationTest.java
@@ -38,7 +38,8 @@ class SolveMailboxInconsistenciesTaskSerializationTest {
     private static final Username USERNAME = Username.of("user");
     private static final MailboxPath MAILBOX_PATH = new MailboxPath(MailboxConstants.USER_NAMESPACE, USERNAME, "mailboxName");
     private static final MailboxPath MAILBOX_PATH_2 = new MailboxPath(MailboxConstants.USER_NAMESPACE, USERNAME, "mailboxName2");
-    private static final CassandraId MAILBOX_ID = CassandraId.of(UUID.fromString("464765a0-e4e7-11e4-aba4-710c1de3782b"));
+    public static final String MAILBOX_ID_AS_STRING = "464765a0-e4e7-11e4-aba4-710c1de3782b";
+    private static final CassandraId MAILBOX_ID = CassandraId.of(UUID.fromString(MAILBOX_ID_AS_STRING));
 
     private static final SolveMailboxInconsistenciesService SERVICE = mock(SolveMailboxInconsistenciesService.class);
     private static final SolveMailboxInconsistenciesTask TASK = new SolveMailboxInconsistenciesTask(SERVICE);
@@ -47,12 +48,12 @@ class SolveMailboxInconsistenciesTaskSerializationTest {
         .mailboxDaoEntry(MAILBOX_PATH, MAILBOX_ID)
         .mailboxPathDaoEntry(MAILBOX_PATH_2, MAILBOX_ID);
     private static final ImmutableList<ConflictingEntry> CONFLICTING_ENTRIES = ImmutableList.of(CONFLICTING_ENTRY);
-    private static final SolveMailboxInconsistenciesTask.Details DETAILS = new SolveMailboxInconsistenciesTask.Details(TIMESTAMP, 0, 1, 2, CONFLICTING_ENTRIES, 3);
+    private static final SolveMailboxInconsistenciesTask.Details DETAILS = new SolveMailboxInconsistenciesTask.Details(TIMESTAMP, 0, 1, ImmutableList.of(MAILBOX_ID_AS_STRING), CONFLICTING_ENTRIES, 3);
     private static final String SERIALIZED_ADDITIONAL_INFORMATION = "{" +
         "  \"type\":\"solve-mailbox-inconsistencies\"," +
         "  \"processedMailboxEntries\":0," +
         "  \"processedMailboxPathEntries\":1," +
-        "  \"fixedInconsistencies\":2," +
+        "  \"fixedInconsistencies\": [\"464765a0-e4e7-11e4-aba4-710c1de3782b\"]," +
         "  \"conflictingEntries\":[{" +
         "    \"mailboxDaoEntry\":{" +
         "      \"mailboxPath\":\"#private:user:mailboxName\"," +


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