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 2021/06/28 10:29:42 UTC
[james-project] 03/04: JAMES-3516 Enable reading and writing to
threadId column
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 6b1bdc08bb11fb5d19cfcbde4627b1e37ad17c47
Author: quanth <hq...@linagora.com>
AuthorDate: Tue Jun 22 17:08:06 2021 +0700
JAMES-3516 Enable reading and writing to threadId column
---
.../mailbox/cassandra/mail/CassandraMessageIdDAO.java | 4 ++++
.../cassandra/mail/CassandraMessageIdToImapUidDAO.java | 4 ++++
.../cassandra/mail/CassandraMessageIdMapperTest.java | 4 ++--
.../cassandra/mail/CassandraMessageMapperTest.java | 8 ++++----
.../task/SolveMessageInconsistenciesServiceTest.java | 18 +++++++++---------
5 files changed, 23 insertions(+), 15 deletions(-)
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java
index dea76ae..5714e36 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java
@@ -29,6 +29,7 @@ import static com.datastax.driver.core.querybuilder.QueryBuilder.set;
import static com.datastax.driver.core.querybuilder.QueryBuilder.update;
import static org.apache.james.mailbox.cassandra.table.CassandraMessageIdTable.FIELDS;
import static org.apache.james.mailbox.cassandra.table.CassandraMessageIdTable.TABLE_NAME;
+import static org.apache.james.mailbox.cassandra.table.CassandraMessageIdTable.THREAD_ID;
import static org.apache.james.mailbox.cassandra.table.CassandraMessageIds.IMAP_UID;
import static org.apache.james.mailbox.cassandra.table.CassandraMessageIds.MAILBOX_ID;
import static org.apache.james.mailbox.cassandra.table.CassandraMessageIds.MAILBOX_ID_LOWERCASE;
@@ -123,6 +124,7 @@ public class CassandraMessageIdDAO {
return session.prepare(insertInto(TABLE_NAME)
.value(MAILBOX_ID, bindMarker(MAILBOX_ID))
.value(IMAP_UID, bindMarker(IMAP_UID))
+ .value(THREAD_ID, bindMarker(THREAD_ID))
.value(MOD_SEQ, bindMarker(MOD_SEQ))
.value(MESSAGE_ID, bindMarker(MESSAGE_ID))
.value(ANSWERED, bindMarker(ANSWERED))
@@ -222,10 +224,12 @@ public class CassandraMessageIdDAO {
public Mono<Void> insert(ComposedMessageIdWithMetaData composedMessageIdWithMetaData) {
ComposedMessageId composedMessageId = composedMessageIdWithMetaData.getComposedMessageId();
Flags flags = composedMessageIdWithMetaData.getFlags();
+ ThreadId threadId = composedMessageIdWithMetaData.getThreadId();
return cassandraAsyncExecutor.executeVoid(insert.bind()
.setUUID(MAILBOX_ID, ((CassandraId) composedMessageId.getMailboxId()).asUuid())
.setLong(IMAP_UID, composedMessageId.getUid().asLong())
.setUUID(MESSAGE_ID, ((CassandraMessageId) composedMessageId.getMessageId()).get())
+ .setUUID(THREAD_ID, ((CassandraMessageId) threadId.getBaseMessageId()).get())
.setLong(MOD_SEQ, composedMessageIdWithMetaData.getModSeq().asLong())
.setBool(ANSWERED, flags.contains(Flag.ANSWERED))
.setBool(DELETED, flags.contains(Flag.DELETED))
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAO.java
index 20466fa..98a58ef 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAO.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAO.java
@@ -42,6 +42,7 @@ import static org.apache.james.mailbox.cassandra.table.MessageIdToImapUid.FIELDS
import static org.apache.james.mailbox.cassandra.table.MessageIdToImapUid.MOD_SEQ;
import static org.apache.james.mailbox.cassandra.table.MessageIdToImapUid.MOD_SEQ_LOWERCASE;
import static org.apache.james.mailbox.cassandra.table.MessageIdToImapUid.TABLE_NAME;
+import static org.apache.james.mailbox.cassandra.table.MessageIdToImapUid.THREAD_ID;
import java.util.Optional;
@@ -116,6 +117,7 @@ public class CassandraMessageIdToImapUidDAO {
.value(MESSAGE_ID, bindMarker(MESSAGE_ID))
.value(MAILBOX_ID, bindMarker(MAILBOX_ID))
.value(IMAP_UID, bindMarker(IMAP_UID))
+ .value(THREAD_ID, bindMarker(THREAD_ID))
.value(MOD_SEQ, bindMarker(MOD_SEQ))
.value(ANSWERED, bindMarker(ANSWERED))
.value(DELETED, bindMarker(DELETED))
@@ -181,10 +183,12 @@ public class CassandraMessageIdToImapUidDAO {
public Mono<Void> insert(ComposedMessageIdWithMetaData composedMessageIdWithMetaData) {
ComposedMessageId composedMessageId = composedMessageIdWithMetaData.getComposedMessageId();
Flags flags = composedMessageIdWithMetaData.getFlags();
+ ThreadId threadId = composedMessageIdWithMetaData.getThreadId();
return cassandraAsyncExecutor.executeVoid(insert.bind()
.setUUID(MESSAGE_ID, ((CassandraMessageId) composedMessageId.getMessageId()).get())
.setUUID(MAILBOX_ID, ((CassandraId) composedMessageId.getMailboxId()).asUuid())
.setLong(IMAP_UID, composedMessageId.getUid().asLong())
+ .setUUID(THREAD_ID, ((CassandraMessageId) threadId.getBaseMessageId()).get())
.setLong(MOD_SEQ, composedMessageIdWithMetaData.getModSeq().asLong())
.setBool(ANSWERED, flags.contains(Flag.ANSWERED))
.setBool(DELETED, flags.contains(Flag.DELETED))
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapperTest.java
index 5261cc2..838d680 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapperTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapperTest.java
@@ -122,7 +122,7 @@ class CassandraMessageIdMapperTest extends MessageIdMapperTest {
.block();
assertThat(statementRecorder.listExecutedStatements(
- StatementRecorder.Selector.preparedStatementStartingWith("SELECT messageId,mailboxId,uid,modSeq,flagAnswered,flagDeleted," +
+ StatementRecorder.Selector.preparedStatementStartingWith("SELECT messageId,mailboxId,uid,threadId,modSeq,flagAnswered,flagDeleted," +
"flagDraft,flagFlagged,flagRecent,flagSeen,flagUser,userFlags FROM imapUidTable")))
.hasSize(1);
}
@@ -206,7 +206,7 @@ class CassandraMessageIdMapperTest extends MessageIdMapperTest {
cassandra.getConf()
.registerScenario(fail()
.forever()
- .whenQueryStartsWith("INSERT INTO imapUidTable (messageId,mailboxId,uid,modSeq,flagAnswered,flagDeleted,flagDraft,flagFlagged,flagRecent,flagSeen,flagUser,userFlags)"));
+ .whenQueryStartsWith("INSERT INTO imapUidTable (messageId,mailboxId,uid,threadId,modSeq,flagAnswered,flagDeleted,flagDraft,flagFlagged,flagRecent,flagSeen,flagUser,userFlags)"));
try {
message1.setUid(mapperProvider.generateMessageUid());
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperTest.java
index 2734fd7..b131393 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperTest.java
@@ -103,7 +103,7 @@ class CassandraMessageMapperTest extends MessageMapperTest {
messageMapper.deleteMessages(benwaInboxMailbox, ImmutableList.of(message1.getUid(), message2.getUid(), message3.getUid()));
assertThat(statementRecorder.listExecutedStatements(Selector.preparedStatementStartingWith(
- "SELECT messageId,mailboxId,uid,modSeq,flagAnswered,flagDeleted,flagDraft,flagFlagged,flagRecent,flagSeen," +
+ "SELECT messageId,mailboxId,uid,threadId,modSeq,flagAnswered,flagDeleted,flagDraft,flagFlagged,flagRecent,flagSeen," +
"flagUser,userFlags FROM messageIdTable WHERE mailboxId=:mailboxId AND ")))
.hasSize(1);
}
@@ -292,7 +292,7 @@ class CassandraMessageMapperTest extends MessageMapperTest {
cassandra.getConf()
.registerScenario(fail()
.forever()
- .whenQueryStartsWith("INSERT INTO imapUidTable (messageId,mailboxId,uid,modSeq,flagAnswered,flagDeleted,flagDraft,flagFlagged,flagRecent,flagSeen,flagUser,userFlags)"));
+ .whenQueryStartsWith("INSERT INTO imapUidTable (messageId,mailboxId,uid,threadId,modSeq,flagAnswered,flagDeleted,flagDraft,flagFlagged,flagRecent,flagSeen,flagUser,userFlags)"));
try {
messageMapper.add(benwaInboxMailbox, message1);
@@ -315,7 +315,7 @@ class CassandraMessageMapperTest extends MessageMapperTest {
cassandra.getConf()
.registerScenario(fail()
.forever()
- .whenQueryStartsWith("INSERT INTO messageIdTable (mailboxId,uid,modSeq,messageId,flagAnswered,flagDeleted,flagDraft,flagFlagged,flagRecent,flagSeen,flagUser,userFlags)"));
+ .whenQueryStartsWith("INSERT INTO messageIdTable (mailboxId,uid,threadId,modSeq,messageId,flagAnswered,flagDeleted,flagDraft,flagFlagged,flagRecent,flagSeen,flagUser,userFlags)"));
try {
messageMapper.add(benwaInboxMailbox, message1);
@@ -343,7 +343,7 @@ class CassandraMessageMapperTest extends MessageMapperTest {
cassandra.getConf()
.registerScenario(fail()
.times(5)
- .whenQueryStartsWith("INSERT INTO messageIdTable (mailboxId,uid,modSeq,messageId,flagAnswered,flagDeleted,flagDraft,flagFlagged,flagRecent,flagSeen,flagUser,userFlags)"));
+ .whenQueryStartsWith("INSERT INTO messageIdTable (mailboxId,uid,threadId,modSeq,messageId,flagAnswered,flagDeleted,flagDraft,flagFlagged,flagRecent,flagSeen,flagUser,userFlags)"));
messageMapper.add(benwaInboxMailbox, message1);
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMessageInconsistenciesServiceTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMessageInconsistenciesServiceTest.java
index 57ad287..d7c7c46 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMessageInconsistenciesServiceTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMessageInconsistenciesServiceTest.java
@@ -172,7 +172,7 @@ public class SolveMessageInconsistenciesServiceTest {
.registerScenario(awaitOn(barrier)
.thenExecuteNormally()
.times(1)
- .whenQueryStartsWith("SELECT messageId,mailboxId,uid,modSeq,flagAnswered,flagDeleted,flagDraft,flagFlagged,flagRecent,flagSeen,flagUser,userFlags FROM messageIdTable WHERE mailboxId=:mailboxId AND uid=:uid;"));
+ .whenQueryStartsWith("SELECT messageId,mailboxId,uid,threadId,modSeq,flagAnswered,flagDeleted,flagDraft,flagFlagged,flagRecent,flagSeen,flagUser,userFlags FROM messageIdTable WHERE mailboxId=:mailboxId AND uid=:uid;"));
Context context = new Context();
Mono<Task.Result> task = testee.fixMessageInconsistencies(context, RunningOptions.DEFAULT).subscribeOn(Schedulers.elastic()).cache();
@@ -201,7 +201,7 @@ public class SolveMessageInconsistenciesServiceTest {
.registerScenario(awaitOn(barrier)
.thenExecuteNormally()
.times(1)
- .whenQueryStartsWith("SELECT messageId,mailboxId,uid,modSeq,flagAnswered,flagDeleted,flagDraft,flagFlagged,flagRecent,flagSeen,flagUser,userFlags FROM messageIdTable WHERE mailboxId=:mailboxId AND uid=:uid;"));
+ .whenQueryStartsWith("SELECT messageId,mailboxId,uid,threadId,modSeq,flagAnswered,flagDeleted,flagDraft,flagFlagged,flagRecent,flagSeen,flagUser,userFlags FROM messageIdTable WHERE mailboxId=:mailboxId AND uid=:uid;"));
Context context = new Context();
Mono<Task.Result> task = testee.fixMessageInconsistencies(context, RunningOptions.DEFAULT).subscribeOn(Schedulers.elastic()).cache();
@@ -292,7 +292,7 @@ public class SolveMessageInconsistenciesServiceTest {
cassandra.getConf()
.registerScenario(fail()
.forever()
- .whenQueryStartsWith("INSERT INTO messageIdTable (mailboxId,uid,modSeq,messageId,flagAnswered,flagDeleted,flagDraft,flagFlagged,flagRecent,flagSeen,flagUser,userFlags) VALUES (:mailboxId,:uid,:modSeq,:messageId,:flagAnswered,:flagDeleted,:flagDraft,:flagFlagged,:flagRecent,:flagSeen,:flagUser,:userFlags)"));
+ .whenQueryStartsWith("INSERT INTO messageIdTable (mailboxId,uid,threadId,modSeq,messageId,flagAnswered,flagDeleted,flagDraft,flagFlagged,flagRecent,flagSeen,flagUser,userFlags) VALUES (:mailboxId,:uid,:threadId,:modSeq,:messageId,:flagAnswered,:flagDeleted,:flagDraft,:flagFlagged,:flagRecent,:flagSeen,:flagUser,:userFlags)"));
assertThat(testee.fixMessageInconsistencies(new Context(), RunningOptions.DEFAULT).block())
.isEqualTo(Task.Result.PARTIAL);
@@ -306,7 +306,7 @@ public class SolveMessageInconsistenciesServiceTest {
cassandra.getConf()
.registerScenario(fail()
.times(1)
- .whenQueryStartsWith("INSERT INTO messageIdTable (mailboxId,uid,modSeq,messageId,flagAnswered,flagDeleted,flagDraft,flagFlagged,flagRecent,flagSeen,flagUser,userFlags) VALUES (:mailboxId,:uid,:modSeq,:messageId,:flagAnswered,:flagDeleted,:flagDraft,:flagFlagged,:flagRecent,:flagSeen,:flagUser,:userFlags)"));
+ .whenQueryStartsWith("INSERT INTO messageIdTable (mailboxId,uid,threadId,modSeq,messageId,flagAnswered,flagDeleted,flagDraft,flagFlagged,flagRecent,flagSeen,flagUser,userFlags) VALUES (:mailboxId,:uid,:threadId,:modSeq,:messageId,:flagAnswered,:flagDeleted,:flagDraft,:flagFlagged,:flagRecent,:flagSeen,:flagUser,:userFlags)"));
assertThat(testee.fixMessageInconsistencies(new Context(), RunningOptions.DEFAULT).block())
.isEqualTo(Task.Result.PARTIAL);
@@ -341,7 +341,7 @@ public class SolveMessageInconsistenciesServiceTest {
cassandra.getConf()
.registerScenario(fail()
.times(1)
- .whenQueryStartsWith("SELECT messageId,mailboxId,uid,modSeq,flagAnswered,flagDeleted,flagDraft,flagFlagged,flagRecent,flagSeen,flagUser,userFlags FROM messageIdTable WHERE mailboxId=:mailboxId AND uid=:uid;"));
+ .whenQueryStartsWith("SELECT messageId,mailboxId,uid,threadId,modSeq,flagAnswered,flagDeleted,flagDraft,flagFlagged,flagRecent,flagSeen,flagUser,userFlags FROM messageIdTable WHERE mailboxId=:mailboxId AND uid=:uid;"));
testee.fixMessageInconsistencies(context, RunningOptions.DEFAULT).block();
@@ -361,7 +361,7 @@ public class SolveMessageInconsistenciesServiceTest {
cassandra.getConf()
.registerScenario(fail()
.times(1)
- .whenQueryStartsWith("SELECT messageId,mailboxId,uid,modSeq,flagAnswered,flagDeleted,flagDraft,flagFlagged,flagRecent,flagSeen,flagUser,userFlags FROM messageIdTable WHERE mailboxId=:mailboxId AND uid=:uid"));
+ .whenQueryStartsWith("SELECT messageId,mailboxId,uid,threadId,modSeq,flagAnswered,flagDeleted,flagDraft,flagFlagged,flagRecent,flagSeen,flagUser,userFlags FROM messageIdTable WHERE mailboxId=:mailboxId AND uid=:uid"));
testee.fixMessageInconsistencies(context, RunningOptions.DEFAULT).block();
@@ -394,7 +394,7 @@ public class SolveMessageInconsistenciesServiceTest {
.registerScenario(awaitOn(barrier)
.thenExecuteNormally()
.times(1)
- .whenQueryStartsWith("SELECT messageId,mailboxId,uid,modSeq,flagAnswered,flagDeleted," +
+ .whenQueryStartsWith("SELECT messageId,mailboxId,uid,threadId,modSeq,flagAnswered,flagDeleted," +
"flagDraft,flagFlagged,flagRecent,flagSeen,flagUser,userFlags FROM messageIdTable " +
"WHERE mailboxId=:mailboxId AND uid=:uid;"));
@@ -516,7 +516,7 @@ public class SolveMessageInconsistenciesServiceTest {
cassandra.getConf()
.registerScenario(fail()
.times(1)
- .whenQueryStartsWith("SELECT messageId,mailboxId,uid,modSeq,flagAnswered,flagDeleted,flagDraft,flagFlagged,flagRecent,flagSeen,flagUser,userFlags FROM messageIdTable WHERE mailboxId=:mailboxId AND uid=:uid"));
+ .whenQueryStartsWith("SELECT messageId,mailboxId,uid,threadId,modSeq,flagAnswered,flagDeleted,flagDraft,flagFlagged,flagRecent,flagSeen,flagUser,userFlags FROM messageIdTable WHERE mailboxId=:mailboxId AND uid=:uid"));
testee.fixMessageInconsistencies(context, RunningOptions.DEFAULT).block();
@@ -536,7 +536,7 @@ public class SolveMessageInconsistenciesServiceTest {
cassandra.getConf()
.registerScenario(fail()
.times(1)
- .whenQueryStartsWith("SELECT messageId,mailboxId,uid,modSeq,flagAnswered,flagDeleted,flagDraft,flagFlagged,flagRecent,flagSeen,flagUser,userFlags FROM imapUidTable WHERE messageid=:messageid AND mailboxid=:mailboxid"));
+ .whenQueryStartsWith("SELECT messageId,mailboxId,uid,threadId,modSeq,flagAnswered,flagDeleted,flagDraft,flagFlagged,flagRecent,flagSeen,flagUser,userFlags FROM imapUidTable WHERE messageid=:messageid AND mailboxid=:mailboxid"));
testee.fixMessageInconsistencies(context, RunningOptions.DEFAULT).block();
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org