This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
The following commit(s) were added to refs/heads/master by this push: new d8e6e092c8 [REFACTORING] More flexible fetch groups for Mailbox metadata (#1347) d8e6e092c8 is described below commit d8e6e092c8f185f6eb7d4a49b37848c57ea291ed Author: Benoit TELLIER <btell...@linagora.com> AuthorDate: Tue Dec 6 08:51:53 2022 +0700 [REFACTORING] More flexible fetch groups for Mailbox metadata (#1347) --- .../org/apache/james/mailbox/MessageManager.java | 35 ++++++-- .../james/mailbox/store/StoreMessageManager.java | 98 ++++++++-------------- .../imap/processor/AbstractSelectionProcessor.java | 6 +- .../james/imap/processor/ExpungeProcessor.java | 4 +- .../james/imap/processor/GetACLProcessor.java | 5 +- .../james/imap/processor/SearchProcessor.java | 3 +- .../james/imap/processor/StatusProcessor.java | 19 +++-- .../james/imap/processor/StoreProcessor.java | 3 +- .../james/imap/processor/fetch/FetchProcessor.java | 3 +- .../james/imap/processor/GetACLProcessorTest.java | 4 +- .../imap/processor/ListRightsProcessorTest.java | 3 +- 11 files changed, 96 insertions(+), 87 deletions(-) diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/MessageManager.java b/mailbox/api/src/main/java/org/apache/james/mailbox/MessageManager.java index 5a787665c0..e2d666df6e 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/MessageManager.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MessageManager.java @@ -473,10 +473,14 @@ public interface MessageManager { * describes which optional data should be returned * @return metadata view filtered for the session's user, not null */ - MailboxMetaData getMetaData(RecentMode recentMode, MailboxSession mailboxSession, MailboxMetaData.FetchGroup fetchGroup) throws MailboxException; + default MailboxMetaData getMetaData(RecentMode recentMode, MailboxSession mailboxSession, MailboxMetaData.FetchGroup fetchGroup) throws MailboxException { + return getMetaData(recentMode, mailboxSession, fetchGroup.getItems()); + } + + MailboxMetaData getMetaData(RecentMode recentMode, MailboxSession mailboxSession, EnumSet<MailboxMetaData.Item> items) throws MailboxException; - default Mono<MailboxMetaData> getMetaDataReactive(RecentMode recentMode, MailboxSession mailboxSession, MailboxMetaData.FetchGroup fetchGroup) throws MailboxException { - return Mono.fromCallable(() -> getMetaData(recentMode, mailboxSession, fetchGroup)); + default Mono<MailboxMetaData> getMetaDataReactive(RecentMode recentMode, MailboxSession mailboxSession, EnumSet<MailboxMetaData.Item> items) throws MailboxException { + return Mono.fromCallable(() -> getMetaData(recentMode, mailboxSession, items)); } /** @@ -490,6 +494,13 @@ public interface MessageManager { IGNORE } + public enum Item { + MailboxCounters, + FirstUnseen, + HighestModSeq, + NextUid + } + /** * Describes the optional data types which will get set in the * {@link MailboxMetaData}. @@ -502,22 +513,32 @@ public interface MessageManager { /** * Only include the message and recent count */ - NO_UNSEEN, + NO_UNSEEN(EnumSet.of(Item.MailboxCounters, Item.NextUid, Item.HighestModSeq)), /** * Only include the unseen message and recent count */ - UNSEEN_COUNT, + UNSEEN_COUNT(EnumSet.of(Item.MailboxCounters, Item.NextUid, Item.HighestModSeq)), /** * Only include the first unseen and the recent count */ - FIRST_UNSEEN, + FIRST_UNSEEN(EnumSet.of(Item.MailboxCounters, Item.NextUid, Item.HighestModSeq, Item.FirstUnseen)), /** * Only return the "always set" metadata as documented above */ - NO_COUNT + NO_COUNT(EnumSet.of(Item.NextUid, Item.HighestModSeq)); + + private final EnumSet<Item> items; + + FetchGroup(EnumSet<Item> items) { + this.items = items; + } + + public EnumSet<Item> getItems() { + return items; + } } /** diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java index 4967109955..5d3fb854bf 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java @@ -575,85 +575,59 @@ public class StoreMessageManager implements MessageManager { } @Override - public Mono<MailboxMetaData> getMetaDataReactive(RecentMode recentMode, MailboxSession mailboxSession, MailboxMetaData.FetchGroup fetchGroup) throws MailboxException { + public Mono<MailboxMetaData> getMetaDataReactive(RecentMode recentMode, MailboxSession mailboxSession, EnumSet<MailboxMetaData.Item> items) throws MailboxException { MailboxACL resolvedAcl = getResolvedAcl(mailboxSession); - boolean hasReadRight = storeRightManager.hasRight(mailbox, MailboxACL.Right.Read, mailboxSession); - if (!hasReadRight) { + if (!storeRightManager.hasRight(mailbox, MailboxACL.Right.Read, mailboxSession)) { return Mono.just(MailboxMetaData.sensibleInformationFree(resolvedAcl, getMailboxEntity().getUidValidity(), isWriteable(mailboxSession))); } Flags permanentFlags = getPermanentFlags(mailboxSession); UidValidity uidValidity = getMailboxEntity().getUidValidity(); MessageMapper messageMapper = mapperFactory.getMessageMapper(mailboxSession); - return messageMapper.executeReactive(Mono.zip(messageMapper.getLastUidReactive(mailbox) - .map(optional -> optional - .map(MessageUid::next) - .orElse(MessageUid.MIN_VALUE)), - messageMapper.getHighestModSeqReactive(mailbox)) - .flatMap(t2 -> toMetadata(messageMapper, recentMode, mailboxSession, fetchGroup, resolvedAcl, permanentFlags, uidValidity, t2.getT1(), t2.getT2()))); - } - - @Override - public MailboxMetaData getMetaData(RecentMode resetRecent, MailboxSession mailboxSession, MailboxMetaData.FetchGroup fetchGroup) throws MailboxException { - return MailboxReactorUtils.block(getMetaDataReactive(resetRecent, mailboxSession, fetchGroup)); - } - - private Mono<MailboxMetaData> toMetadata(MessageMapper messageMapper, RecentMode resetRecent, MailboxSession mailboxSession, MailboxMetaData.FetchGroup fetchGroup, MailboxACL resolvedAcl, Flags permanentFlags, UidValidity uidValidity, MessageUid uidNext, ModSeq highestModSeq) { - try { - switch (fetchGroup) { - case UNSEEN_COUNT: - return metadataUnseenCount(messageMapper, resetRecent, mailboxSession, resolvedAcl, permanentFlags, uidValidity, uidNext, highestModSeq); - case FIRST_UNSEEN: - return metadataFirstUnseen(messageMapper, resetRecent, mailboxSession, resolvedAcl, permanentFlags, uidValidity, uidNext, highestModSeq); - case NO_UNSEEN: - return metadataNoUnseen(messageMapper, resetRecent, mailboxSession, resolvedAcl, permanentFlags, uidValidity, uidNext, highestModSeq); - default: - return metadataDefault(resetRecent, mailboxSession, resolvedAcl, permanentFlags, uidValidity, uidNext, highestModSeq); - } - } catch (MailboxException e) { - return Mono.error(e); + return messageMapper.executeReactive( + Mono.zip(nextUid(messageMapper, items), + highestModSeq(messageMapper, items), + firstUnseen(messageMapper, items), + mailboxCounters(messageMapper, items), + recent(recentMode, mailboxSession)) + .map(t5 -> new MailboxMetaData(t5.getT5(), permanentFlags, uidValidity, t5.getT1(), t5.getT2(), t5.getT4().getCount(), + t5.getT4().getUnseen(), t5.getT3().orElse(null), isWriteable(mailboxSession), resolvedAcl))); + } + + private Mono<ModSeq> highestModSeq(MessageMapper messageMapper, EnumSet<MailboxMetaData.Item> items) { + if (items.contains(MailboxMetaData.Item.HighestModSeq)) { + return messageMapper.getHighestModSeqReactive(mailbox); } + return Mono.just(ModSeq.first()); } - private Mono<MailboxMetaData> metadataDefault(RecentMode recentMode, MailboxSession mailboxSession, MailboxACL resolvedAcl, Flags permanentFlags, UidValidity uidValidity, MessageUid uidNext, ModSeq highestModSeq) throws MailboxException { - MessageUid firstUnseen = null; - long unseenCount = 0; - long messageCount = -1; - List<MessageUid> recent = new ArrayList<>(); - final MailboxMetaData metaData = new MailboxMetaData(recent, permanentFlags, uidValidity, uidNext, highestModSeq, messageCount, unseenCount, firstUnseen, isWriteable(mailboxSession), resolvedAcl); - - // just reset the recent but not include them in the metadata - if (recentMode == RecentMode.RESET) { - return recent(recentMode, mailboxSession) - .thenReturn(metaData); + private Mono<MessageUid> nextUid(MessageMapper messageMapper, EnumSet<MailboxMetaData.Item> items) { + if (items.contains(MailboxMetaData.Item.NextUid)) { + return messageMapper.getLastUidReactive(mailbox) + .map(optional -> optional + .map(MessageUid::next) + .orElse(MessageUid.MIN_VALUE)); } - return Mono.just(metaData); + return Mono.just(MessageUid.MIN_VALUE); } - private Mono<MailboxMetaData> metadataNoUnseen(MessageMapper messageMapper, RecentMode recentMode, MailboxSession mailboxSession, MailboxACL resolvedAcl, Flags permanentFlags, UidValidity uidValidity, MessageUid uidNext, ModSeq highestModSeq) throws MailboxException { - MessageUid firstUnseen = null; - long unseenCount = 0; - return Mono.zip( - messageMapper.getMailboxCountersReactive(mailbox).map(MailboxCounters::getUnseen), - recent(recentMode, mailboxSession)) - .map(Throwing.function(t2 -> new MailboxMetaData(t2.getT2(), permanentFlags, uidValidity, uidNext, highestModSeq, t2.getT1(), unseenCount, firstUnseen, isWriteable(mailboxSession), resolvedAcl))); + private Mono<Optional<MessageUid>> firstUnseen(MessageMapper messageMapper, EnumSet<MailboxMetaData.Item> items) { + if (items.contains(MailboxMetaData.Item.FirstUnseen)) { + return messageMapper.findFirstUnseenMessageUidReactive(getMailboxEntity()); + } + return Mono.just(Optional.empty()); } - private Mono<MailboxMetaData> metadataFirstUnseen(MessageMapper messageMapper, RecentMode recentMode, MailboxSession mailboxSession, MailboxACL resolvedAcl, Flags permanentFlags, UidValidity uidValidity, MessageUid uidNext, ModSeq highestModSeq) throws MailboxException { - long unseenCount = 0; - return Mono.zip( - messageMapper.getMailboxCountersReactive(mailbox).map(MailboxCounters::getCount), - recent(recentMode, mailboxSession), - messageMapper.findFirstUnseenMessageUidReactive(getMailboxEntity())) - .map(Throwing.function(t3 -> new MailboxMetaData(t3.getT2(), permanentFlags, uidValidity, uidNext, highestModSeq, t3.getT1(), unseenCount, t3.getT3().orElse(null), isWriteable(mailboxSession), resolvedAcl))); + private Mono<MailboxCounters> mailboxCounters(MessageMapper messageMapper, EnumSet<MailboxMetaData.Item> items) { + if (items.contains(MailboxMetaData.Item.MailboxCounters)) { + return messageMapper.getMailboxCountersReactive(getMailboxEntity()); + } + return Mono.just(MailboxCounters.empty(getId())); } - private Mono<MailboxMetaData> metadataUnseenCount(MessageMapper messageMapper, RecentMode recentMode, MailboxSession mailboxSession, MailboxACL resolvedAcl, Flags permanentFlags, UidValidity uidValidity, MessageUid uidNext, ModSeq highestModSeq) throws MailboxException { - MessageUid firstUnseen = null; - return Mono.zip( - messageMapper.getMailboxCountersReactive(mailbox), - recent(recentMode, mailboxSession)) - .map(Throwing.function(t2 -> new MailboxMetaData(t2.getT2(), permanentFlags, uidValidity, uidNext, highestModSeq, t2.getT1().getCount(), t2.getT1().getUnseen(), firstUnseen, isWriteable(mailboxSession), resolvedAcl))); + @Override + public MailboxMetaData getMetaData(RecentMode resetRecent, MailboxSession mailboxSession, EnumSet<MailboxMetaData.Item> items) throws MailboxException { + return MailboxReactorUtils.block(getMetaDataReactive(resetRecent, mailboxSession, items)); } @Override diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java index 93b3515655..38b66816ee 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java @@ -25,6 +25,7 @@ import static org.apache.james.mailbox.MessageManager.MailboxMetaData.RecentMode import java.util.ArrayList; import java.util.Arrays; +import java.util.EnumSet; import java.util.List; import java.util.Optional; import java.util.stream.IntStream; @@ -55,7 +56,6 @@ import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageManager; import org.apache.james.mailbox.MessageManager.MailboxMetaData; -import org.apache.james.mailbox.MessageManager.MailboxMetaData.FetchGroup; import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.ModSeq; import org.apache.james.mailbox.exception.MailboxException; @@ -398,7 +398,7 @@ abstract class AbstractSelectionProcessor<R extends AbstractMailboxSelectionRequ return Mono.from(mailboxManager.getMailboxReactive(mailboxPath, mailboxSession)) .flatMap(Throwing.function(mailbox -> selectMailbox(session, responder, mailbox, currentMailbox) .flatMap(Throwing.function(sessionMailbox -> - mailbox.getMetaDataReactive(recentMode(!openReadOnly), mailboxSession, FetchGroup.FIRST_UNSEEN) + mailbox.getMetaDataReactive(recentMode(!openReadOnly), mailboxSession, EnumSet.of(MailboxMetaData.Item.FirstUnseen, MailboxMetaData.Item.HighestModSeq, MailboxMetaData.Item.NextUid, MailboxMetaData.Item.MailboxCounters)) .doOnNext(next -> addRecent(next, sessionMailbox)))))); } @@ -460,7 +460,7 @@ abstract class AbstractSelectionProcessor<R extends AbstractMailboxSelectionRequ boolean send = true; return getSelectedMailboxReactive(session, Mono.error(() -> new EnableException("Unable to enable " + capability.asString(), new MailboxException("Session not in SELECTED state")))) - .flatMap(Throwing.function(mailbox -> mailbox.getMetaDataReactive(IGNORE, session.getMailboxSession(), FetchGroup.NO_COUNT))) + .flatMap(Throwing.function(mailbox -> mailbox.getMetaDataReactive(IGNORE, session.getMailboxSession(), EnumSet.of(MailboxMetaData.Item.HighestModSeq)))) .doOnNext(metaData -> condstoreEnablingCommand(session, responder, metaData, send)) .then(); } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/ExpungeProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/ExpungeProcessor.java index 10bdd87840..e6d95a1fea 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/ExpungeProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/ExpungeProcessor.java @@ -22,6 +22,7 @@ package org.apache.james.imap.processor; import static org.apache.james.imap.api.ImapConstants.SUPPORTS_UIDPLUS; import static org.apache.james.mailbox.MessageManager.MailboxMetaData.RecentMode.IGNORE; +import java.util.EnumSet; import java.util.List; import org.apache.james.imap.api.ImapConstants; @@ -36,7 +37,6 @@ import org.apache.james.imap.message.request.ExpungeRequest; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageManager; -import org.apache.james.mailbox.MessageManager.MailboxMetaData.FetchGroup; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.MessageRangeException; import org.apache.james.mailbox.model.MailboxACL; @@ -106,7 +106,7 @@ public class ExpungeProcessor extends AbstractMailboxProcessor<ExpungeRequest> i // // See RFC5162 3.3 EXPUNGE Command 3.5. UID EXPUNGE Command if (EnableProcessor.getEnabledCapabilities(session).contains(ImapConstants.SUPPORTS_QRESYNC) && expunged > 0) { - return mailbox.getMetaDataReactive(IGNORE, mailboxSession, FetchGroup.NO_COUNT) + return mailbox.getMetaDataReactive(IGNORE, mailboxSession, EnumSet.of(MessageManager.MailboxMetaData.Item.HighestModSeq)) .doOnNext(metaData -> okComplete(request, ResponseCode.highestModSeq(metaData.getHighestModSeq()), responder)) .then(); } else { diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetACLProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetACLProcessor.java index 8008f15b31..345d1a5d42 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetACLProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetACLProcessor.java @@ -21,6 +21,7 @@ package org.apache.james.imap.processor; import static org.apache.james.mailbox.MessageManager.MailboxMetaData.RecentMode.IGNORE; +import java.util.EnumSet; import java.util.List; import org.apache.james.imap.api.ImapConstants; @@ -33,7 +34,7 @@ import org.apache.james.imap.message.request.GetACLRequest; import org.apache.james.imap.message.response.ACLResponse; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; -import org.apache.james.mailbox.MessageManager.MailboxMetaData.FetchGroup; +import org.apache.james.mailbox.MessageManager; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.MailboxNotFoundException; import org.apache.james.mailbox.model.MailboxACL; @@ -97,7 +98,7 @@ public class GetACLProcessor extends AbstractMailboxProcessor<GetACLRequest> imp no(request, responder, text); return Mono.empty(); } else { - return mailbox.getMetaDataReactive(IGNORE, mailboxSession, FetchGroup.NO_COUNT) + return mailbox.getMetaDataReactive(IGNORE, mailboxSession, EnumSet.noneOf(MessageManager.MailboxMetaData.Item.class)) .doOnNext(metaData -> { ACLResponse aclResponse = new ACLResponse(mailboxName, metaData.getACL()); responder.respond(aclResponse); 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 786a8915ed..fa1b9afb48 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 @@ -25,6 +25,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Date; +import java.util.EnumSet; import java.util.List; import java.util.Optional; @@ -133,7 +134,7 @@ public class SearchProcessor extends AbstractMailboxProcessor<SearchRequest> imp // See RFC4551: 3.4. MODSEQ Search Criterion in SEARCH if (session.getAttribute(SEARCH_MODSEQ) != null) { try { - return mailbox.getMetaDataReactive(IGNORE, msession, MailboxMetaData.FetchGroup.NO_COUNT) + return mailbox.getMetaDataReactive(IGNORE, msession, EnumSet.of(MailboxMetaData.Item.HighestModSeq)) .flatMap(metaData -> { // Enable CONDSTORE as this is a CONDSTORE enabling command condstoreEnablingCommand(session, responder, metaData, true); diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/StatusProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/StatusProcessor.java index 495004e721..7feeb4afbc 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/StatusProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/StatusProcessor.java @@ -22,6 +22,7 @@ package org.apache.james.imap.processor; import static org.apache.james.mailbox.MessageManager.MailboxMetaData.RecentMode.IGNORE; import static org.apache.james.mailbox.MessageManager.MailboxMetaData.RecentMode.RETRIEVE; +import java.util.EnumSet; import java.util.List; import java.util.Optional; @@ -123,7 +124,7 @@ public class StatusProcessor extends AbstractMailboxProcessor<StatusRequest> imp } private Mono<MessageManager.MailboxMetaData> retrieveMetadata(MessageManager mailbox, StatusDataItems statusDataItems, MailboxSession mailboxSession) { - MessageManager.MailboxMetaData.FetchGroup fetchGroup = computeFetchGroup(statusDataItems); + EnumSet<MessageManager.MailboxMetaData.Item> fetchGroup = computeFetchGroup(statusDataItems); RecentMode recentMode = computeRecentMode(statusDataItems); try { @@ -164,12 +165,18 @@ public class StatusProcessor extends AbstractMailboxProcessor<StatusRequest> imp }); } - private MessageManager.MailboxMetaData.FetchGroup computeFetchGroup(StatusDataItems statusDataItems) { - if (statusDataItems.isUnseen()) { - return MessageManager.MailboxMetaData.FetchGroup.UNSEEN_COUNT; - } else { - return MessageManager.MailboxMetaData.FetchGroup.NO_UNSEEN; + private EnumSet<MessageManager.MailboxMetaData.Item> computeFetchGroup(StatusDataItems statusDataItems) { + EnumSet<MessageManager.MailboxMetaData.Item> result = EnumSet.noneOf(MessageManager.MailboxMetaData.Item.class); + if (statusDataItems.isUnseen() || statusDataItems.isMessages()) { + result.add(MessageManager.MailboxMetaData.Item.MailboxCounters); + } + if (statusDataItems.isHighestModSeq()) { + result.add(MessageManager.MailboxMetaData.Item.HighestModSeq); + } + if (statusDataItems.isUidNext()) { + result.add(MessageManager.MailboxMetaData.Item.NextUid); } + return result; } private Long unseen(StatusDataItems statusDataItems, MessageManager.MailboxMetaData metaData) { 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 00cb177af5..d8e625845f 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 static org.apache.james.mailbox.MessageManager.MailboxMetaData.RecentMode import java.util.ArrayList; import java.util.Arrays; +import java.util.EnumSet; import java.util.List; import java.util.Map; import java.util.Optional; @@ -233,7 +234,7 @@ public class StoreProcessor extends AbstractMailboxProcessor<StoreRequest> { if (unchangedSince != -1) { // Enable CONDSTORE as this is a CONDSTORE enabling command - return mailbox.getMetaDataReactive(IGNORE, mailboxSession, MailboxMetaData.FetchGroup.NO_COUNT) + return mailbox.getMetaDataReactive(IGNORE, mailboxSession, EnumSet.of(MailboxMetaData.Item.HighestModSeq)) .doOnNext(metaData -> condstoreEnablingCommand(session, responder, metaData, true)); } return Mono.empty(); diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java index 15131dd815..23f6327ce5 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java @@ -23,6 +23,7 @@ import static org.apache.james.mailbox.MessageManager.MailboxMetaData.RecentMode import static org.apache.james.util.ReactorUtils.logOnError; import java.util.ArrayList; +import java.util.EnumSet; import java.util.List; import java.util.Optional; import java.util.Set; @@ -95,7 +96,7 @@ public class FetchProcessor extends AbstractMailboxProcessor<FetchRequest> { Set<Capability> enabled = EnableProcessor.getEnabledCapabilities(session); if (constoreCommand && !enabled.contains(ImapConstants.SUPPORTS_CONDSTORE)) { // Enable CONDSTORE as this is a CONDSTORE enabling command - return mailbox.getMetaDataReactive(IGNORE, mailboxSession, MailboxMetaData.FetchGroup.NO_COUNT) + return mailbox.getMetaDataReactive(IGNORE, mailboxSession, EnumSet.of(MailboxMetaData.Item.HighestModSeq)) .doOnNext(metaData -> condstoreEnablingCommand(session, responder, metaData, true)) .flatMap(Throwing.<MailboxMetaData, Mono<Void>>function( any -> doFetch(selected, request, responder, fetch, mailboxSession, mailbox, session)) diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/GetACLProcessorTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/GetACLProcessorTest.java index 616042b1e3..4b4cec6600 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/processor/GetACLProcessorTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/GetACLProcessorTest.java @@ -29,6 +29,8 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; +import java.util.EnumSet; + import org.apache.james.core.Username; import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.message.response.ImapResponseMessage; @@ -91,7 +93,7 @@ class GetACLProcessorTest { imapSession.authenticated(); imapSession.setMailboxSession(mailboxSession); - when(messageManager.getMetaDataReactive(any(MailboxMetaData.RecentMode.class), any(MailboxSession.class), any(MailboxMetaData.FetchGroup.class))) + when(messageManager.getMetaDataReactive(any(MailboxMetaData.RecentMode.class), any(MailboxSession.class), any(EnumSet.class))) .thenReturn(Mono.just(metaData)); when(mailboxManager.getMailboxReactive(any(MailboxPath.class), any(MailboxSession.class))) .thenReturn(Mono.just(messageManager)); diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/ListRightsProcessorTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/ListRightsProcessorTest.java index 07f9b69d83..5f2ac5fafc 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/processor/ListRightsProcessorTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/ListRightsProcessorTest.java @@ -29,6 +29,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; +import java.util.EnumSet; import java.util.List; import org.apache.james.core.Username; @@ -99,7 +100,7 @@ class ListRightsProcessorTest { imapSession.authenticated(); imapSession.setMailboxSession(mailboxSession); - when(messageManager.getMetaDataReactive(any(MailboxMetaData.RecentMode.class), any(MailboxSession.class), any(MailboxMetaData.FetchGroup.class))) + when(messageManager.getMetaDataReactive(any(MailboxMetaData.RecentMode.class), any(MailboxSession.class), any(EnumSet.class))) .thenReturn(Mono.just(metaData)); when(mailboxManager.getMailboxReactive(any(MailboxPath.class), any(MailboxSession.class))) .thenReturn(Mono.just(messageManager)); --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org For additional commands, e-mail: notifications-h...@james.apache.org