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 bt...@apache.org on 2020/04/17 15:30:43 UTC
[james-project] 09/16: JAMES-3146 Avoid batching single values
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 ea486bae41ed791e96ae923e2f6961ff7fead271
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Sat Apr 11 20:47:48 2020 +0700
JAMES-3146 Avoid batching single values
Batches incurs a performance penalty for no isolation/transactionality
when combined with lightweight transaction. We 'd better not pay this
cost.
Glowroot instrumentation showed adding an event to an aggregate took 40ms
---
.../eventstore/cassandra/EventStoreDao.scala | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/event-sourcing/event-store-cassandra/src/main/scala/org/apache/james/eventsourcing/eventstore/cassandra/EventStoreDao.scala b/event-sourcing/event-store-cassandra/src/main/scala/org/apache/james/eventsourcing/eventstore/cassandra/EventStoreDao.scala
index 9fda3a4..5921733 100644
--- a/event-sourcing/event-store-cassandra/src/main/scala/org/apache/james/eventsourcing/eventstore/cassandra/EventStoreDao.scala
+++ b/event-sourcing/event-store-cassandra/src/main/scala/org/apache/james/eventsourcing/eventstore/cassandra/EventStoreDao.scala
@@ -51,10 +51,18 @@ class EventStoreDao @Inject() (val session: Session, val jsonEventSerializer: Js
}
private[cassandra] def appendAll(events: Iterable[Event]): SMono[Boolean] = {
- val batch: BatchStatement = new BatchStatement
- events.foreach((event: Event) => batch.add(insertEvent(event)))
- SMono(cassandraAsyncExecutor.executeReturnApplied(batch))
- .map(_.booleanValue())
+ SMono(cassandraAsyncExecutor.executeReturnApplied(appendQuery(events))
+ .map(_.booleanValue()))
+ }
+
+ private def appendQuery(events: Iterable[Event]) = {
+ if (events.size == 1)
+ insertEvent(events.head)
+ else {
+ val batch: BatchStatement = new BatchStatement
+ events.foreach((event: Event) => batch.add(insertEvent(event)))
+ batch
+ }
}
private def insertEvent(event: Event): BoundStatement = {
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org