New EventEnvelope including Offset rather than Long #21722

This commit is contained in:
Johan Andrén 2016-10-27 15:32:10 +02:00 committed by GitHub
parent 3951cf4e68
commit 33ece118a8
13 changed files with 75 additions and 58 deletions

View file

@ -6,7 +6,7 @@ package docs.persistence.query
import akka.NotUsed
import akka.persistence.journal.{ EventAdapter, EventSeq }
import akka.testkit.AkkaSpec
import akka.persistence.query.{ EventEnvelope, PersistenceQuery, Sequence }
import akka.persistence.query.{ EventEnvelope, EventEnvelope2, PersistenceQuery, Sequence }
import akka.persistence.query.scaladsl._
import akka.persistence.query.journal.leveldb.scaladsl.LeveldbReadJournal
import akka.persistence.journal.Tagged
@ -81,7 +81,7 @@ class LeveldbPersistenceQueryDocSpec(config: String) extends AkkaSpec(config) {
val queries = PersistenceQuery(system).readJournalFor[LeveldbReadJournal](
LeveldbReadJournal.Identifier)
val src: Source[EventEnvelope, NotUsed] =
val src: Source[EventEnvelope2, NotUsed] =
queries.eventsByTag(tag = "green", offset = Sequence(0L))
//#EventsByTag
}

View file

@ -6,7 +6,7 @@ package docs.persistence.query
import akka.actor.Props
import akka.persistence.PersistentRepr
import akka.persistence.query.EventEnvelope
import akka.persistence.query.{ EventEnvelope, EventEnvelope2, Sequence }
import akka.serialization.SerializationExtension
import akka.stream.actor.ActorPublisher
import akka.stream.actor.ActorPublisherMessage.{ Cancel, Request }
@ -20,7 +20,7 @@ object MyEventsByTagPublisher {
//#events-by-tag-publisher
class MyEventsByTagPublisher(tag: String, offset: Long, refreshInterval: FiniteDuration)
extends ActorPublisher[EventEnvelope] {
extends ActorPublisher[EventEnvelope2] {
private case object Continue
@ -28,7 +28,7 @@ class MyEventsByTagPublisher(tag: String, offset: Long, refreshInterval: FiniteD
private val Limit = 1000
private var currentOffset = offset
var buf = Vector.empty[EventEnvelope]
var buf = Vector.empty[EventEnvelope2]
import context.dispatcher
val continueTask = context.system.scheduler.schedule(
@ -81,7 +81,7 @@ class MyEventsByTagPublisher(tag: String, offset: Long, refreshInterval: FiniteD
buf = result.map {
case (id, bytes) =>
val p = serialization.deserialize(bytes, classOf[PersistentRepr]).get
EventEnvelope(offset = id, p.persistenceId, p.sequenceNr, p.payload)
EventEnvelope2(offset = Sequence(id), p.persistenceId, p.sequenceNr, p.payload)
}
} catch {
case e: Exception =>

View file

@ -55,11 +55,15 @@ object PersistenceQueryDocSpec {
config.getDuration("refresh-interval", MILLISECONDS).millis
override def eventsByTag(
tag: String, offset: Offset = Sequence(0L)): Source[EventEnvelope, NotUsed] = offset match {
tag: String, offset: Offset = Sequence(0L)): Source[EventEnvelope2, NotUsed] = offset match {
case Sequence(offsetValue)
val props = MyEventsByTagPublisher.props(tag, offsetValue, refreshInterval)
Source.actorPublisher[EventEnvelope](props)
.mapMaterializedValue(_ => NotUsed)
.map {
case EventEnvelope(offset, id, seqNr, event) =>
EventEnvelope2(Sequence(offset), id, seqNr, event)
}
case _
throw new IllegalArgumentException("LevelDB does not support " + offset.getClass.getName + " offsets")
}
@ -100,7 +104,7 @@ object PersistenceQueryDocSpec {
with akka.persistence.query.javadsl.CurrentPersistenceIdsQuery {
override def eventsByTag(
tag: String, offset: Offset = Sequence(0L)): javadsl.Source[EventEnvelope, NotUsed] =
tag: String, offset: Offset = Sequence(0L)): javadsl.Source[EventEnvelope2, NotUsed] =
scaladslReadJournal.eventsByTag(tag, offset).asJava
override def eventsByPersistenceId(
@ -225,7 +229,7 @@ class PersistenceQueryDocSpec(s: String) extends AkkaSpec(s) {
//#events-by-tag
// assuming journal is able to work with numeric offsets we can:
val blueThings: Source[EventEnvelope, NotUsed] =
val blueThings: Source[EventEnvelope2, NotUsed] =
readJournal.eventsByTag("blue")
// find top 10 blue things:
@ -262,7 +266,7 @@ class PersistenceQueryDocSpec(s: String) extends AkkaSpec(s) {
//#projection-into-different-store
class MyResumableProjection(name: String) {
def saveProgress(offset: Long): Future[Long] = ???
def saveProgress(offset: Offset): Future[Long] = ???
def latestOffset: Future[Long] = ???
}
//#projection-into-different-store