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 <[email protected]> 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: [email protected] For additional commands, e-mail: [email protected]
