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

Reply via email to