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