in core/src/main/scala/org/apache/pekko/persistence/cassandra/journal/CassandraJournal.scala [336:364]
protected def generateUUID(pr: PersistentRepr): UUID = Uuids.timeBased()
private def extractTagWrites(serialized: Seq[SerializedAtomicWrite]): BulkTagWrite = {
if (serialized.isEmpty) BulkTagWrite(Nil, Nil)
else if (serialized.size == 1 && serialized.head.payload.size == 1) {
// optimization for one single event, which is the typical case
val s = serialized.head.payload.head
if (s.tags.isEmpty) BulkTagWrite(Nil, s :: Nil)
else BulkTagWrite(s.tags.map(tag => TagWrite(tag, s :: Nil)).toList, Nil)
} else {
val messagesByTag: Map[String, Seq[Serialized]] =
serialized.flatMap(_.payload).flatMap(s => s.tags.map((_, s))).groupBy(_._1).map {
case (tag, messages) => (tag, messages.map(_._2))
}
val messagesWithoutTag =
for {
a <- serialized
b <- a.payload
if b.tags.isEmpty
} yield b
val writesWithTags: immutable.Seq[TagWrite] = messagesByTag.map {
case (tag, writes) => TagWrite(tag, writes)
}.toList
BulkTagWrite(writesWithTags, messagesWithoutTag)
}
}