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/07/15 04:36:09 UTC
[james-project] 01/09: JAMES-3295 Use
MessageManager::listMessagesMetadata more widely
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 85ab0e3de59e6c1109495a1adf4b02fc5f912af4
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Sun Jul 12 21:25:52 2020 +0700
JAMES-3295 Use MessageManager::listMessagesMetadata more widely
---
.../imap/processor/AbstractMailboxProcessor.java | 15 +++++++------
.../james/imap/processor/SearchProcessor.java | 11 +++++++---
.../james/imap/processor/StoreProcessor.java | 25 ++++++++++++++--------
.../jmap/MessageFastViewProjectionCorrector.java | 7 +++---
4 files changed, 37 insertions(+), 21 deletions(-)
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
index 0936cc6..4f23ebc 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
@@ -60,12 +60,10 @@ import org.apache.james.mailbox.ModSeq;
import org.apache.james.mailbox.NullableMessageSequenceNumber;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.exception.MessageRangeException;
-import org.apache.james.mailbox.model.FetchGroup;
+import org.apache.james.mailbox.model.ComposedMessageIdWithMetaData;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.model.MessageRange;
import org.apache.james.mailbox.model.MessageRange.Type;
-import org.apache.james.mailbox.model.MessageResult;
-import org.apache.james.mailbox.model.MessageResultIterator;
import org.apache.james.mailbox.model.SearchQuery;
import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.metrics.api.TimeMetric;
@@ -74,6 +72,8 @@ import org.slf4j.LoggerFactory;
import com.github.fge.lambdas.Throwing;
+import reactor.core.publisher.Flux;
+
public abstract class AbstractMailboxProcessor<R extends ImapRequest> extends AbstractChainedProcessor<R> {
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractMailboxProcessor.class);
@@ -242,12 +242,15 @@ public abstract class AbstractMailboxProcessor<R extends ImapRequest> extends Ab
MessageRange messageSet, MessageManager mailbox,
boolean isModSeqPermanent,
MailboxSession mailboxSession) throws MailboxException {
- final MessageResultIterator it = mailbox.getMessages(messageSet, FetchGroup.MINIMAL, mailboxSession);
+ Iterator<ComposedMessageIdWithMetaData> it = Flux.from(
+ mailbox.listMessagesMetadata(messageSet, mailboxSession))
+ .toStream()
+ .iterator();
final boolean qresyncEnabled = EnableProcessor.getEnabledCapabilities(session).contains(ImapConstants.SUPPORTS_QRESYNC);
final boolean condstoreEnabled = EnableProcessor.getEnabledCapabilities(session).contains(ImapConstants.SUPPORTS_CONDSTORE);
while (it.hasNext()) {
- MessageResult mr = it.next();
- final MessageUid uid = mr.getUid();
+ ComposedMessageIdWithMetaData mr = it.next();
+ final MessageUid uid = mr.getComposedMessageId().getUid();
selected.msn(uid).fold(() -> {
LOGGER.debug("No message found with uid {} in the uid<->msn mapping for mailbox {}. This may be because it was deleted by a concurrent session. So skip it..", uid, selected.getMailboxId().serialize());
// skip this as it was not found in the mapping
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/SearchProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
index 58e6889..e86e850 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
@@ -23,6 +23,7 @@ import java.io.Closeable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
+import java.util.Iterator;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
@@ -55,9 +56,8 @@ import org.apache.james.mailbox.MessageUid;
import org.apache.james.mailbox.ModSeq;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.exception.MessageRangeException;
-import org.apache.james.mailbox.model.FetchGroup;
+import org.apache.james.mailbox.model.ComposedMessageIdWithMetaData;
import org.apache.james.mailbox.model.MessageRange;
-import org.apache.james.mailbox.model.MessageResultIterator;
import org.apache.james.mailbox.model.SearchQuery;
import org.apache.james.mailbox.model.SearchQuery.AddressType;
import org.apache.james.mailbox.model.SearchQuery.Criterion;
@@ -71,6 +71,8 @@ import com.github.fge.lambdas.Throwing;
import com.github.steveash.guavate.Guavate;
import com.google.common.collect.ImmutableList;
+import reactor.core.publisher.Flux;
+
public class SearchProcessor extends AbstractMailboxProcessor<SearchRequest> implements CapabilityImplementingProcessor {
private static final Logger LOGGER = LoggerFactory.getLogger(SearchProcessor.class);
@@ -248,7 +250,10 @@ public class SearchProcessor extends AbstractMailboxProcessor<SearchRequest> imp
// Reverse loop over the ranges as its more likely that we find a match at the end
int size = ranges.size();
for (int i = size - 1; i > 0; i--) {
- MessageResultIterator results = mailbox.getMessages(ranges.get(i), FetchGroup.MINIMAL, session);
+ Iterator<ComposedMessageIdWithMetaData> results = Flux.from(
+ mailbox.listMessagesMetadata(ranges.get(i), session))
+ .toStream()
+ .iterator();
while (results.hasNext()) {
ModSeq modSeq = results.next().getModSeq();
if (highestModSeq == null || modSeq.asLong() > highestModSeq.asLong()) {
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/StoreProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/StoreProcessor.java
index f14fac2..0ec5697 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/StoreProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/StoreProcessor.java
@@ -23,6 +23,7 @@ import java.io.Closeable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -52,16 +53,16 @@ import org.apache.james.mailbox.ModSeq;
import org.apache.james.mailbox.NullableMessageSequenceNumber;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.exception.MessageRangeException;
-import org.apache.james.mailbox.model.FetchGroup;
+import org.apache.james.mailbox.model.ComposedMessageIdWithMetaData;
import org.apache.james.mailbox.model.MessageRange;
import org.apache.james.mailbox.model.MessageRange.Type;
-import org.apache.james.mailbox.model.MessageResult;
-import org.apache.james.mailbox.model.MessageResultIterator;
import org.apache.james.metrics.api.MetricFactory;
import org.apache.james.util.MDCBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import reactor.core.publisher.Flux;
+
public class StoreProcessor extends AbstractMailboxProcessor<StoreRequest> {
private static final Logger LOGGER = LoggerFactory.getLogger(StoreProcessor.class);
@@ -122,10 +123,13 @@ public class StoreProcessor extends AbstractMailboxProcessor<StoreRequest> {
if (unchangedSince != -1) {
List<MessageUid> uids = new ArrayList<>();
- MessageResultIterator results = mailbox.getMessages(messageSet, FetchGroup.MINIMAL, mailboxSession);
+ Iterator<ComposedMessageIdWithMetaData> results = Flux.from(
+ mailbox.listMessagesMetadata(messageSet, mailboxSession))
+ .toStream()
+ .iterator();
while (results.hasNext()) {
- MessageResult r = results.next();
- MessageUid uid = r.getUid();
+ ComposedMessageIdWithMetaData r = results.next();
+ MessageUid uid = r.getComposedMessageId().getUid();
boolean fail = false;
@@ -252,11 +256,14 @@ public class StoreProcessor extends AbstractMailboxProcessor<StoreRequest> {
// - QRESYNC was enabled via ENABLE QRESYNC
//
if (unchangedSince != -1 || qresyncEnabled || condstoreEnabled) {
- MessageResultIterator results = mailbox.getMessages(messageSet, FetchGroup.MINIMAL, mailboxSession);
+ Iterator<ComposedMessageIdWithMetaData> results = Flux.from(
+ mailbox.listMessagesMetadata(messageSet, mailboxSession))
+ .toStream()
+ .iterator();
while (results.hasNext()) {
- MessageResult r = results.next();
+ ComposedMessageIdWithMetaData r = results.next();
// Store the modseq for the uid for later usage in the response
- modSeqs.put(r.getUid(),r.getModSeq());
+ modSeqs.put(r.getComposedMessageId().getUid(),r.getModSeq());
}
}
diff --git a/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/MessageFastViewProjectionCorrector.java b/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/MessageFastViewProjectionCorrector.java
index b54aaaf..7d37d04 100644
--- a/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/MessageFastViewProjectionCorrector.java
+++ b/server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/MessageFastViewProjectionCorrector.java
@@ -34,6 +34,7 @@ import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.MessageManager;
import org.apache.james.mailbox.MessageUid;
import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.model.ComposedMessageIdWithMetaData;
import org.apache.james.mailbox.model.FetchGroup;
import org.apache.james.mailbox.model.MailboxMetaData;
import org.apache.james.mailbox.model.MessageId;
@@ -190,7 +191,7 @@ public class MessageFastViewProjectionCorrector {
return listUsersMailboxes(session)
.flatMap(mailboxMetadata -> retrieveMailbox(session, mailboxMetadata), MAILBOX_CONCURRENCY)
.flatMap(Throwing.function(messageManager -> listAllMailboxMessages(messageManager, session)
- .map(message -> new ProjectionEntry(messageManager, message.getUid(), session))), MAILBOX_CONCURRENCY)
+ .map(message -> new ProjectionEntry(messageManager, message.getComposedMessageId().getUid(), session))), MAILBOX_CONCURRENCY)
.onErrorResume(MailboxException.class, e -> {
LOGGER.error("JMAP fastview re-computation aborted for {} as we failed listing user mailboxes", session.getUser(), e);
progress.incrementFailedUserCount();
@@ -231,8 +232,8 @@ public class MessageFastViewProjectionCorrector {
return Mono.fromCallable(() -> mailboxManager.getMailbox(mailboxMetadata.getId(), session));
}
- private Flux<MessageResult> listAllMailboxMessages(MessageManager messageManager, MailboxSession session) throws MailboxException {
- return Iterators.toFlux(messageManager.getMessages(MessageRange.all(), FetchGroup.MINIMAL, session));
+ private Flux<ComposedMessageIdWithMetaData> listAllMailboxMessages(MessageManager messageManager, MailboxSession session) {
+ return Flux.from(messageManager.listMessagesMetadata(MessageRange.all(), session));
}
private Mono<MessageResult> retrieveContent(MessageManager messageManager, MailboxSession session, MessageUid uid) {
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org