You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2023/04/22 15:09:51 UTC
[james-project] 01/05: JAMES-3777 EventSourcingFilteringManagement avoid read after writes
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 <bt...@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-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org