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 <[email protected]> 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: [email protected] For additional commands, e-mail: [email protected]
