You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by rc...@apache.org on 2020/10/14 02:31:41 UTC
[james-project] 15/22: JAMES-3409 Fix solving mailboxes
inconsistencies
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 7ca7ebcfd9e1d0c0596be8172aa226ac9ea8b1c2
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Aug 11 15:43:27 2020 +0700
JAMES-3409 Fix solving mailboxes inconsistencies
---
.../cassandra/mail/task/ConflictingEntry.java | 5 +-
.../task/SolveMailboxInconsistenciesService.java | 94 +++++++++++-----------
.../SolveMailboxInconsistenciesServiceTest.java | 94 +++++++++++-----------
3 files changed, 95 insertions(+), 98 deletions(-)
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/ConflictingEntry.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/ConflictingEntry.java
index 34a9f1a..87074c2 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/ConflictingEntry.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/ConflictingEntry.java
@@ -21,7 +21,6 @@ package org.apache.james.mailbox.cassandra.mail.task;
import java.util.Objects;
-import org.apache.james.mailbox.cassandra.mail.CassandraIdAndPath;
import org.apache.james.mailbox.model.Mailbox;
import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.mailbox.model.MailboxPath;
@@ -96,8 +95,8 @@ public class ConflictingEntry {
interface RequireMailboxPathDaoEntry {
ConflictingEntry mailboxPathDaoEntry(DaoEntry daoEntry);
- default ConflictingEntry mailboxPathDaoEntry(CassandraIdAndPath mailbox) {
- return mailboxPathDaoEntry(mailbox.getMailboxPath(), mailbox.getCassandraId());
+ default ConflictingEntry mailboxPathDaoEntry(Mailbox mailbox) {
+ return mailboxPathDaoEntry(mailbox.generateAssociatedPath(), mailbox.getMailboxId());
}
default ConflictingEntry mailboxPathDaoEntry(MailboxPath path, MailboxId id) {
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 aa53506..8aacb18 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
@@ -30,9 +30,8 @@ import javax.inject.Inject;
import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionManager;
import org.apache.james.backends.cassandra.versions.SchemaVersion;
import org.apache.james.mailbox.cassandra.ids.CassandraId;
-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.cassandra.mail.CassandraMailboxPathV3DAO;
import org.apache.james.mailbox.model.Mailbox;
import org.apache.james.mailbox.model.MailboxId;
import org.apache.james.task.Task;
@@ -52,7 +51,7 @@ public class SolveMailboxInconsistenciesService {
@FunctionalInterface
interface Inconsistency {
- Mono<Result> fix(Context context, CassandraMailboxDAO mailboxDAO, CassandraMailboxPathV2DAO pathV2DAO);
+ Mono<Result> fix(Context context, CassandraMailboxDAO mailboxDAO, CassandraMailboxPathV3DAO pathV3DAO);
}
private static Inconsistency NO_INCONSISTENCY = (context, mailboxDAO1, pathV2DAO) -> Mono.just(Result.COMPLETED);
@@ -71,8 +70,8 @@ public class SolveMailboxInconsistenciesService {
}
@Override
- public Mono<Result> fix(Context context, CassandraMailboxDAO mailboxDAO, CassandraMailboxPathV2DAO pathV2DAO) {
- return pathV2DAO.save(mailbox.generateAssociatedPath(), (CassandraId) mailbox.getMailboxId())
+ public Mono<Result> fix(Context context, CassandraMailboxDAO mailboxDAO, CassandraMailboxPathV3DAO pathV3DAO) {
+ return pathV3DAO.save(mailbox)
.map(success -> {
if (success) {
notifySuccess(context);
@@ -112,27 +111,27 @@ public class SolveMailboxInconsistenciesService {
* In order to solve this inconsistency, we can simply re-reference the mailboxPath.
*/
private static class OrphanMailboxPathDAOEntry implements Inconsistency {
- private final CassandraIdAndPath pathRegistration;
+ private final Mailbox mailbox;
- private OrphanMailboxPathDAOEntry(CassandraIdAndPath pathRegistration) {
- this.pathRegistration = pathRegistration;
+ private OrphanMailboxPathDAOEntry(Mailbox mailbox) {
+ this.mailbox = mailbox;
}
@Override
- public Mono<Result> fix(Context context, CassandraMailboxDAO mailboxDAO, CassandraMailboxPathV2DAO pathV2DAO) {
- return pathV2DAO.delete(pathRegistration.getMailboxPath())
+ public Mono<Result> fix(Context context, CassandraMailboxDAO mailboxDAO, CassandraMailboxPathV3DAO pathV3DAO) {
+ return pathV3DAO.delete(mailbox.generateAssociatedPath())
.doOnSuccess(any -> {
LOGGER.info("Inconsistency fixed for orphan mailboxPath {} - {}",
- pathRegistration.getCassandraId().serialize(),
- pathRegistration.getMailboxPath().asString());
- context.addFixedInconsistency(pathRegistration.getCassandraId());
+ mailbox.getMailboxId().serialize(),
+ mailbox.generateAssociatedPath().asString());
+ context.addFixedInconsistency(mailbox.getMailboxId());
})
.map(any -> Result.COMPLETED)
.defaultIfEmpty(Result.COMPLETED)
.onErrorResume(e -> {
LOGGER.error("Failed fixing inconsistency for orphan mailboxPath {} - {}",
- pathRegistration.getCassandraId().serialize(),
- pathRegistration.getMailboxPath().asString(),
+ mailbox.getMailboxId().serialize(),
+ mailbox.generateAssociatedPath().asString(),
e);
context.incrementErrors();
return Mono.just(Result.PARTIAL);
@@ -152,19 +151,12 @@ public class SolveMailboxInconsistenciesService {
private static class ConflictingEntryInconsistency implements Inconsistency {
private final ConflictingEntry conflictingEntry;
- private ConflictingEntryInconsistency(Mailbox mailbox, CassandraIdAndPath pathRegistration) {
- boolean samePath = mailbox.generateAssociatedPath().equals(pathRegistration.getMailboxPath());
- boolean sameId = mailbox.getMailboxId().equals(pathRegistration.getCassandraId());
-
- Preconditions.checkState(samePath != sameId);
-
- this.conflictingEntry = ConflictingEntry.builder()
- .mailboxDaoEntry(mailbox)
- .mailboxPathDaoEntry(pathRegistration);
+ private ConflictingEntryInconsistency(ConflictingEntry conflictingEntry) {
+ this.conflictingEntry = conflictingEntry;
}
@Override
- public Mono<Result> fix(Context context, CassandraMailboxDAO mailboxDAO, CassandraMailboxPathV2DAO pathV2DAO) {
+ public Mono<Result> fix(Context context, CassandraMailboxDAO mailboxDAO, CassandraMailboxPathV3DAO pathV3DAO) {
LOGGER.error("MailboxDAO contains mailbox {} {} which conflict with corresponding registration {} {}. " +
"We recommend merging these mailboxes together to prevent mail data loss.",
conflictingEntry.getMailboxDaoEntry().getMailboxId(), conflictingEntry.getMailboxDaoEntry().getMailboxPath(),
@@ -353,16 +345,16 @@ public class SolveMailboxInconsistenciesService {
}
}
- private static final SchemaVersion MAILBOX_PATH_V_2_MIGRATION_PERFORMED_VERSION = new SchemaVersion(6);
+ private static final SchemaVersion MAILBOX_PATH_V_3_MIGRATION_PERFORMED_VERSION = new SchemaVersion(8);
private final CassandraMailboxDAO mailboxDAO;
- private final CassandraMailboxPathV2DAO mailboxPathV2DAO;
+ private final CassandraMailboxPathV3DAO mailboxPathV3DAO;
private final CassandraSchemaVersionManager versionManager;
@Inject
- SolveMailboxInconsistenciesService(CassandraMailboxDAO mailboxDAO, CassandraMailboxPathV2DAO mailboxPathV2DAO, CassandraSchemaVersionManager versionManager) {
+ SolveMailboxInconsistenciesService(CassandraMailboxDAO mailboxDAO, CassandraMailboxPathV3DAO mailboxPathV3DAO, CassandraSchemaVersionManager versionManager) {
this.mailboxDAO = mailboxDAO;
- this.mailboxPathV2DAO = mailboxPathV2DAO;
+ this.mailboxPathV3DAO = mailboxPathV3DAO;
this.versionManager = versionManager;
}
@@ -377,49 +369,55 @@ public class SolveMailboxInconsistenciesService {
private void assertValidVersion() {
SchemaVersion version = versionManager.computeVersion().block();
- boolean isVersionValid = version.isAfterOrEquals(MAILBOX_PATH_V_2_MIGRATION_PERFORMED_VERSION);
+ boolean isVersionValid = version.isAfterOrEquals(MAILBOX_PATH_V_3_MIGRATION_PERFORMED_VERSION);
Preconditions.checkState(isVersionValid,
- "Schema version %s is required in order to ensure mailboxPathV2DAO to be correctly populated, got %s",
- MAILBOX_PATH_V_2_MIGRATION_PERFORMED_VERSION.getValue(),
+ "Schema version %s is required in order to ensure mailboxPathV3DAO to be correctly populated, got %s",
+ MAILBOX_PATH_V_3_MIGRATION_PERFORMED_VERSION.getValue(),
version.getValue());
}
private Flux<Result> processMailboxPathDaoInconsistencies(Context context) {
- return mailboxPathV2DAO.listAll()
- .flatMap(this::detectInconsistency)
- .flatMap(inconsistency -> inconsistency.fix(context, mailboxDAO, mailboxPathV2DAO))
+ return mailboxPathV3DAO.listAll()
+ .flatMap(this::detectMailboxPathDaoInconsistency)
+ .flatMap(inconsistency -> inconsistency.fix(context, mailboxDAO, mailboxPathV3DAO))
.doOnNext(any -> context.incrementProcessedMailboxPathEntries());
}
private Flux<Result> processMailboxDaoInconsistencies(Context context) {
return mailboxDAO.retrieveAllMailboxes()
- .flatMap(this::detectInconsistency)
- .flatMap(inconsistency -> inconsistency.fix(context, mailboxDAO, mailboxPathV2DAO))
+ .flatMap(this::detectMailboxDaoInconsistency)
+ .flatMap(inconsistency -> inconsistency.fix(context, mailboxDAO, mailboxPathV3DAO))
.doOnNext(any -> context.incrementProcessedMailboxEntries());
}
- private Mono<Inconsistency> detectInconsistency(Mailbox mailbox) {
- return mailboxPathV2DAO.retrieveId(mailbox.generateAssociatedPath())
- .map(pathRegistration -> {
- if (pathRegistration.getCassandraId().equals(mailbox.getMailboxId())) {
+ private Mono<Inconsistency> detectMailboxDaoInconsistency(Mailbox mailbox) {
+ return mailboxPathV3DAO.retrieve(mailbox.generateAssociatedPath())
+ .map(mailboxByPath -> {
+ if (mailboxByPath.getMailboxId().equals(mailbox.getMailboxId())) {
return NO_INCONSISTENCY;
}
// Path entry references another mailbox.
- return new ConflictingEntryInconsistency(mailbox, pathRegistration);
+ return new ConflictingEntryInconsistency(ConflictingEntry.builder()
+ .mailboxDaoEntry(mailbox)
+ .mailboxPathDaoEntry(mailboxByPath));
})
.defaultIfEmpty(new OrphanMailboxDAOEntry(mailbox));
}
- private Mono<Inconsistency> detectInconsistency(CassandraIdAndPath pathRegistration) {
- return mailboxDAO.retrieveMailbox(pathRegistration.getCassandraId())
- .map(mailbox -> {
- if (mailbox.generateAssociatedPath().equals(pathRegistration.getMailboxPath())) {
+ private Mono<Inconsistency> detectMailboxPathDaoInconsistency(Mailbox mailboxByPath) {
+ CassandraId cassandraId = (CassandraId) mailboxByPath.getMailboxId();
+
+ return mailboxDAO.retrieveMailbox(cassandraId)
+ .map(mailboxById -> {
+ if (mailboxByPath.generateAssociatedPath().equals(mailboxById.generateAssociatedPath())) {
return NO_INCONSISTENCY;
}
// Mailbox references another path
- return new ConflictingEntryInconsistency(mailbox, pathRegistration);
+ return new ConflictingEntryInconsistency(ConflictingEntry.builder()
+ .mailboxDaoEntry(mailboxById)
+ .mailboxPathDaoEntry(mailboxByPath));
})
- .defaultIfEmpty(new OrphanMailboxPathDAOEntry(pathRegistration));
+ .defaultIfEmpty(new OrphanMailboxPathDAOEntry(mailboxByPath));
}
}
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 623d4a3..4bf8ec1 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
@@ -33,9 +33,8 @@ import org.apache.james.backends.cassandra.versions.CassandraSchemaVersionModule
import org.apache.james.backends.cassandra.versions.SchemaVersion;
import org.apache.james.core.Username;
import org.apache.james.mailbox.cassandra.ids.CassandraId;
-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.cassandra.mail.CassandraMailboxPathV3DAO;
import org.apache.james.mailbox.cassandra.mail.task.SolveMailboxInconsistenciesService.Context;
import org.apache.james.mailbox.cassandra.modules.CassandraAclModule;
import org.apache.james.mailbox.cassandra.modules.CassandraMailboxModule;
@@ -54,9 +53,11 @@ class SolveMailboxInconsistenciesServiceTest {
private static final Username USER = Username.of("user");
private static final MailboxPath MAILBOX_PATH = MailboxPath.forUser(USER, "abc");
private static final MailboxPath NEW_MAILBOX_PATH = MailboxPath.forUser(USER, "xyz");
- private static CassandraId CASSANDRA_ID_1 = CassandraId.timeBased();
+ private static final CassandraId CASSANDRA_ID_1 = CassandraId.timeBased();
private static final Mailbox MAILBOX = new Mailbox(MAILBOX_PATH, UID_VALIDITY_1, CASSANDRA_ID_1);
- private static CassandraId CASSANDRA_ID_2 = CassandraId.timeBased();
+ private static final Mailbox MAILBOX_NEW_PATH = new Mailbox(NEW_MAILBOX_PATH, UID_VALIDITY_1, CASSANDRA_ID_1);
+ private static final CassandraId CASSANDRA_ID_2 = CassandraId.timeBased();
+ private static final Mailbox MAILBOX_2 = new Mailbox(MAILBOX_PATH, UID_VALIDITY_1, CASSANDRA_ID_2);
@RegisterExtension
static CassandraClusterExtension cassandraCluster = new CassandraClusterExtension(
@@ -67,7 +68,7 @@ class SolveMailboxInconsistenciesServiceTest {
CassandraMailboxDAO mailboxDAO;
- CassandraMailboxPathV2DAO mailboxPathV2DAO;
+ CassandraMailboxPathV3DAO mailboxPathV3DAO;
CassandraSchemaVersionDAO versionDAO;
SolveMailboxInconsistenciesService testee;
@@ -77,14 +78,14 @@ class SolveMailboxInconsistenciesServiceTest {
cassandra.getConf(),
cassandra.getTypesProvider(),
cassandraCluster.getCassandraConsistenciesConfiguration());
- mailboxPathV2DAO = new CassandraMailboxPathV2DAO(
+ mailboxPathV3DAO = new CassandraMailboxPathV3DAO(
cassandra.getConf(),
CassandraUtils.WITH_DEFAULT_CONFIGURATION,
cassandraCluster.getCassandraConsistenciesConfiguration());
versionDAO = new CassandraSchemaVersionDAO(cassandra.getConf());
- testee = new SolveMailboxInconsistenciesService(mailboxDAO, mailboxPathV2DAO, new CassandraSchemaVersionManager(versionDAO));
+ testee = new SolveMailboxInconsistenciesService(mailboxDAO, mailboxPathV3DAO, new CassandraSchemaVersionManager(versionDAO));
- versionDAO.updateVersion(new SchemaVersion(7)).block();
+ versionDAO.updateVersion(new SchemaVersion(8)).block();
}
@Test
@@ -94,7 +95,7 @@ class SolveMailboxInconsistenciesServiceTest {
assertThatThrownBy(() -> testee.fixMailboxInconsistencies(new Context()).block())
.isInstanceOf(IllegalStateException.class)
- .hasMessage("Schema version 6 is required in order to ensure mailboxPathV2DAO to be correctly populated, got 5");
+ .hasMessage("Schema version 8 is required in order to ensure mailboxPathV3DAO to be correctly populated, got 5");
}
@Test
@@ -103,13 +104,13 @@ class SolveMailboxInconsistenciesServiceTest {
assertThatThrownBy(() -> testee.fixMailboxInconsistencies(new Context()).block())
.isInstanceOf(IllegalStateException.class)
- .hasMessage("Schema version 6 is required in order to ensure mailboxPathV2DAO to be correctly populated, got 5");
+ .hasMessage("Schema version 8 is required in order to ensure mailboxPathV3DAO to be correctly populated, got 5");
}
@Test
void fixMailboxInconsistenciesShouldNotFailWhenIsEqualToMailboxPathV2Migration() {
versionDAO.truncateVersion().block();
- versionDAO.updateVersion(new SchemaVersion(6)).block();
+ versionDAO.updateVersion(new SchemaVersion(8)).block();
assertThatCode(() -> testee.fixMailboxInconsistencies(new Context()).block())
.doesNotThrowAnyException();
@@ -118,7 +119,7 @@ class SolveMailboxInconsistenciesServiceTest {
@Test
void fixMailboxInconsistenciesShouldNotFailWhenIsAboveMailboxPathV2Migration() {
versionDAO.truncateVersion().block();
- versionDAO.updateVersion(new SchemaVersion(7)).block();
+ versionDAO.updateVersion(new SchemaVersion(8)).block();
assertThatCode(() -> testee.fixMailboxInconsistencies(new Context()).block())
.doesNotThrowAnyException();
@@ -133,7 +134,7 @@ class SolveMailboxInconsistenciesServiceTest {
@Test
void fixMailboxInconsistenciesShouldReturnCompletedWhenConsistentData() {
mailboxDAO.save(MAILBOX).block();
- mailboxPathV2DAO.save(MAILBOX_PATH, CASSANDRA_ID_1).block();
+ mailboxPathV3DAO.save(MAILBOX).block();
assertThat(testee.fixMailboxInconsistencies(new Context()).block())
.isEqualTo(Result.COMPLETED);
@@ -149,7 +150,7 @@ class SolveMailboxInconsistenciesServiceTest {
@Test
void fixMailboxInconsistenciesShouldReturnCompletedWhenOrphanPathData() {
- mailboxPathV2DAO.save(MAILBOX_PATH, CASSANDRA_ID_1).block();
+ mailboxPathV3DAO.save(MAILBOX).block();
assertThat(testee.fixMailboxInconsistencies(new Context()).block())
.isEqualTo(Result.COMPLETED);
@@ -158,7 +159,7 @@ class SolveMailboxInconsistenciesServiceTest {
@Test
void fixMailboxInconsistenciesShouldReturnPartialWhenDAOMisMatchOnId() {
mailboxDAO.save(MAILBOX).block();
- mailboxPathV2DAO.save(MAILBOX_PATH, CASSANDRA_ID_2).block();
+ mailboxPathV3DAO.save(MAILBOX_2).block();
assertThat(testee.fixMailboxInconsistencies(new Context()).block())
.isEqualTo(Result.PARTIAL);
@@ -167,7 +168,7 @@ class SolveMailboxInconsistenciesServiceTest {
@Test
void fixMailboxInconsistenciesShouldReturnPartialWhenDAOMisMatchOnPath() {
mailboxDAO.save(MAILBOX).block();
- mailboxPathV2DAO.save(NEW_MAILBOX_PATH, CASSANDRA_ID_1).block();
+ mailboxPathV3DAO.save(MAILBOX_NEW_PATH).block();
assertThat(testee.fixMailboxInconsistencies(new Context()).block())
.isEqualTo(Result.PARTIAL);
@@ -186,7 +187,7 @@ class SolveMailboxInconsistenciesServiceTest {
void fixMailboxInconsistenciesShouldUpdateContextWhenConsistentData() {
Context context = new Context();
mailboxDAO.save(MAILBOX).block();
- mailboxPathV2DAO.save(MAILBOX_PATH, CASSANDRA_ID_1).block();
+ mailboxPathV3DAO.save(MAILBOX).block();
testee.fixMailboxInconsistencies(context).block();
@@ -217,7 +218,7 @@ class SolveMailboxInconsistenciesServiceTest {
@Test
void fixMailboxInconsistenciesShouldUpdateContextWhenOrphanPathData() {
Context context = new Context();
- mailboxPathV2DAO.save(MAILBOX_PATH, CASSANDRA_ID_1).block();
+ mailboxPathV3DAO.save(MAILBOX).block();
testee.fixMailboxInconsistencies(context).block();
@@ -233,7 +234,7 @@ class SolveMailboxInconsistenciesServiceTest {
void fixMailboxInconsistenciesShouldUpdateContextWhenDAOMisMatchOnId() {
Context context = new Context();
mailboxDAO.save(MAILBOX).block();
- mailboxPathV2DAO.save(MAILBOX_PATH, CASSANDRA_ID_2).block();
+ mailboxPathV3DAO.save(MAILBOX_2).block();
mailboxDAO.save(new Mailbox(MAILBOX_PATH, UID_VALIDITY_2, CASSANDRA_ID_2)).block();
testee.fixMailboxInconsistencies(context).block();
@@ -253,7 +254,7 @@ class SolveMailboxInconsistenciesServiceTest {
void fixMailboxInconsistenciesShouldUpdateContextWhenDAOMisMatchOnPath() {
Context context = new Context();
mailboxDAO.save(MAILBOX).block();
- mailboxPathV2DAO.save(NEW_MAILBOX_PATH, CASSANDRA_ID_1).block();
+ mailboxPathV3DAO.save(MAILBOX_NEW_PATH).block();
testee.fixMailboxInconsistencies(context).block();
@@ -264,7 +265,7 @@ class SolveMailboxInconsistenciesServiceTest {
.addFixedInconsistencies(CASSANDRA_ID_1)
.addConflictingEntry(ConflictingEntry.builder()
.mailboxDaoEntry(MAILBOX)
- .mailboxPathDaoEntry(NEW_MAILBOX_PATH, CASSANDRA_ID_1))
+ .mailboxPathDaoEntry(MAILBOX_NEW_PATH))
.build()
.snapshot());
}
@@ -275,22 +276,22 @@ class SolveMailboxInconsistenciesServiceTest {
SoftAssertions.assertSoftly(softly -> {
softly.assertThat(mailboxDAO.retrieveAllMailboxes().collectList().block()).isEmpty();
- softly.assertThat(mailboxPathV2DAO.listAll().collectList().block()).isEmpty();
+ softly.assertThat(mailboxPathV3DAO.listAll().collectList().block()).isEmpty();
});
}
@Test
void fixMailboxInconsistenciesShouldNotAlterStateWhenConsistent() {
mailboxDAO.save(MAILBOX).block();
- mailboxPathV2DAO.save(MAILBOX_PATH, CASSANDRA_ID_1).block();
+ mailboxPathV3DAO.save(MAILBOX).block();
testee.fixMailboxInconsistencies(new Context()).block();
SoftAssertions.assertSoftly(softly -> {
softly.assertThat(mailboxDAO.retrieveAllMailboxes().collectList().block())
.containsExactlyInAnyOrder(MAILBOX);
- softly.assertThat(mailboxPathV2DAO.listAll().collectList().block())
- .containsExactlyInAnyOrder(new CassandraIdAndPath(CASSANDRA_ID_1, MAILBOX_PATH));
+ softly.assertThat(mailboxPathV3DAO.listAll().collectList().block())
+ .containsExactlyInAnyOrder(MAILBOX);
});
}
@@ -303,21 +304,21 @@ class SolveMailboxInconsistenciesServiceTest {
SoftAssertions.assertSoftly(softly -> {
softly.assertThat(mailboxDAO.retrieveAllMailboxes().collectList().block())
.containsExactlyInAnyOrder(MAILBOX);
- softly.assertThat(mailboxPathV2DAO.listAll().collectList().block())
- .containsExactlyInAnyOrder(new CassandraIdAndPath(CASSANDRA_ID_1, MAILBOX_PATH));
+ softly.assertThat(mailboxPathV3DAO.listAll().collectList().block())
+ .containsExactlyInAnyOrder(MAILBOX);
});
}
@Test
void fixMailboxInconsistenciesShouldAlterStateWhenOrphanMailboxPath() {
- mailboxPathV2DAO.save(MAILBOX_PATH, CASSANDRA_ID_1).block();
+ mailboxPathV3DAO.save(MAILBOX).block();
testee.fixMailboxInconsistencies(new Context()).block();
SoftAssertions.assertSoftly(softly -> {
softly.assertThat(mailboxDAO.retrieveAllMailboxes().collectList().block())
.isEmpty();
- softly.assertThat(mailboxPathV2DAO.listAll().collectList().block())
+ softly.assertThat(mailboxPathV3DAO.listAll().collectList().block())
.isEmpty();
});
}
@@ -327,18 +328,18 @@ class SolveMailboxInconsistenciesServiceTest {
mailboxDAO.save(MAILBOX).block();
Mailbox mailbox2 = new Mailbox(NEW_MAILBOX_PATH, UID_VALIDITY_2, CASSANDRA_ID_2);
mailboxDAO.save(mailbox2).block();
- mailboxPathV2DAO.save(MAILBOX_PATH, CASSANDRA_ID_2).block();
- mailboxPathV2DAO.save(NEW_MAILBOX_PATH, CASSANDRA_ID_1).block();
+ mailboxPathV3DAO.save(MAILBOX_2).block();
+ mailboxPathV3DAO.save(MAILBOX_NEW_PATH).block();
testee.fixMailboxInconsistencies(new Context()).block();
SoftAssertions.assertSoftly(softly -> {
softly.assertThat(mailboxDAO.retrieveAllMailboxes().collectList().block())
.containsExactlyInAnyOrder(MAILBOX, mailbox2);
- softly.assertThat(mailboxPathV2DAO.listAll().collectList().block())
+ softly.assertThat(mailboxPathV3DAO.listAll().collectList().block())
.containsExactlyInAnyOrder(
- new CassandraIdAndPath(CASSANDRA_ID_1, NEW_MAILBOX_PATH),
- new CassandraIdAndPath(CASSANDRA_ID_2, MAILBOX_PATH));
+ MAILBOX_NEW_PATH,
+ MAILBOX_2);
});
}
@@ -347,31 +348,31 @@ class SolveMailboxInconsistenciesServiceTest {
// Note that CASSANDRA_ID_1 becomes usable
// However in order to avoid data loss, merging CASSANDRA_ID_1 and CASSANDRA_ID_2 is still required
mailboxDAO.save(MAILBOX).block();
- mailboxPathV2DAO.save(NEW_MAILBOX_PATH, CASSANDRA_ID_1).block();
+ mailboxPathV3DAO.save(MAILBOX_NEW_PATH).block();
testee.fixMailboxInconsistencies(new Context()).block();
SoftAssertions.assertSoftly(softly -> {
softly.assertThat(mailboxDAO.retrieveAllMailboxes().collectList().block())
.containsExactlyInAnyOrder(MAILBOX);
- softly.assertThat(mailboxPathV2DAO.listAll().collectList().block())
+ softly.assertThat(mailboxPathV3DAO.listAll().collectList().block())
.containsExactlyInAnyOrder(
- new CassandraIdAndPath(CASSANDRA_ID_1, NEW_MAILBOX_PATH),
- new CassandraIdAndPath(CASSANDRA_ID_1, MAILBOX_PATH));
+ MAILBOX_NEW_PATH,
+ MAILBOX);
});
}
@Test
void fixMailboxInconsistenciesShouldAlterStateWhenDaoMisMatchOnId() {
mailboxDAO.save(MAILBOX).block();
- mailboxPathV2DAO.save(MAILBOX_PATH, CASSANDRA_ID_2).block();
+ mailboxPathV3DAO.save(MAILBOX_2).block();
testee.fixMailboxInconsistencies(new Context()).block();
SoftAssertions.assertSoftly(softly -> {
softly.assertThat(mailboxDAO.retrieveAllMailboxes().collectList().block())
.containsExactlyInAnyOrder(MAILBOX);
- softly.assertThat(mailboxPathV2DAO.listAll().collectList().block())
+ softly.assertThat(mailboxPathV3DAO.listAll().collectList().block())
.isEmpty();
});
}
@@ -379,7 +380,7 @@ class SolveMailboxInconsistenciesServiceTest {
@Test
void multipleRunShouldDaoMisMatchOnId() {
mailboxDAO.save(MAILBOX).block();
- mailboxPathV2DAO.save(MAILBOX_PATH, CASSANDRA_ID_2).block();
+ mailboxPathV3DAO.save(MAILBOX_2).block();
testee.fixMailboxInconsistencies(new Context()).block();
testee.fixMailboxInconsistencies(new Context()).block();
@@ -387,8 +388,8 @@ class SolveMailboxInconsistenciesServiceTest {
SoftAssertions.assertSoftly(softly -> {
softly.assertThat(mailboxDAO.retrieveAllMailboxes().collectList().block())
.containsExactlyInAnyOrder(MAILBOX);
- softly.assertThat(mailboxPathV2DAO.listAll().collectList().block())
- .containsExactlyInAnyOrder(new CassandraIdAndPath(CASSANDRA_ID_1, MAILBOX_PATH));
+ softly.assertThat(mailboxPathV3DAO.listAll().collectList().block())
+ .containsExactlyInAnyOrder(MAILBOX);
});
}
@@ -398,7 +399,7 @@ class SolveMailboxInconsistenciesServiceTest {
Mailbox mailbox2 = new Mailbox(MAILBOX_PATH, UID_VALIDITY_2, CASSANDRA_ID_2);
mailboxDAO.save(MAILBOX).block();
- mailboxPathV2DAO.save(MAILBOX_PATH, CASSANDRA_ID_2).block();
+ mailboxPathV3DAO.save(MAILBOX_2).block();
mailboxDAO.save(mailbox2).block();
testee.fixMailboxInconsistencies(new Context()).block();
@@ -406,9 +407,8 @@ class SolveMailboxInconsistenciesServiceTest {
SoftAssertions.assertSoftly(softly -> {
softly.assertThat(mailboxDAO.retrieveAllMailboxes().collectList().block())
.containsExactlyInAnyOrder(MAILBOX, mailbox2);
- softly.assertThat(mailboxPathV2DAO.listAll().collectList().block())
- .containsExactlyInAnyOrder(
- new CassandraIdAndPath(CASSANDRA_ID_2, MAILBOX_PATH));
+ softly.assertThat(mailboxPathV3DAO.listAll().collectList().block())
+ .containsExactlyInAnyOrder(MAILBOX_2);
});
}
}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org