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
commit 199221edfcdd76a4ece98ee6db2b3e23f6dc287b Author: Benoit Tellier <btell...@linagora.com> AuthorDate: Fri Apr 14 13:38:59 2023 +0700 JAMES-3777 EventSourcingFilteringManagement avoid read after writes Version can be deduced from the events generated by the writes without conducting further reads. --- .../main/java/org/apache/james/jmap/api/filtering/Version.java | 9 +++++++++ .../api/filtering/impl/EventSourcingFilteringManagement.java | 8 ++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/Version.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/Version.java index 780ef3da2b..8e87cd2de6 100644 --- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/Version.java +++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/Version.java @@ -20,12 +20,21 @@ package org.apache.james.jmap.api.filtering; import java.util.Objects; +import java.util.Optional; + +import org.apache.james.eventsourcing.EventId; import com.google.common.base.MoreObjects; public class Version { public static final Version INITIAL = new Version(-1); + public static Version from(Optional<EventId> eventId) { + return eventId.map(EventId::value) + .map(Version::new) + .orElse(Version.INITIAL); + } + private final int version; public Version(int version) { diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/EventSourcingFilteringManagement.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/EventSourcingFilteringManagement.java index 27cd52c377..8dfda3d241 100644 --- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/EventSourcingFilteringManagement.java +++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/EventSourcingFilteringManagement.java @@ -60,10 +60,10 @@ public class EventSourcingFilteringManagement implements FilteringManagement { @Override public Publisher<Version> defineRulesForUser(Username username, List<Rule> rules, Optional<Version> ifInState) { return Mono.from(eventSourcingSystem.dispatch(new DefineRulesCommand(username, rules, ifInState))) - .then(Mono.from(eventStore.getEventsOfAggregate(new FilteringAggregateId(username))) - .map(History::getVersionAsJava) - .map(eventIdOptional -> eventIdOptional.map(eventId -> new Version(eventId.value())) - .orElse(Version.INITIAL))); + .map(events -> Version.from(events.stream() + .map(Event::eventId) + .sorted(Comparator.reverseOrder()) + .findFirst())); } @Override --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org For additional commands, e-mail: notifications-h...@james.apache.org