=per #15916 Read highestSeqNr first in replay
* we need to read the higestSeqNr anyway and it is better to do it first and limit the asyncReadHighestSequenceNr to that (instead of Long.MaxValue) * return the highestSeqNr in the ReplayMessagesSuccess * this also removes one become state in PersistentActor recovery logic
This commit is contained in:
parent
aaa6b623e1
commit
09a2f9c248
12 changed files with 103 additions and 126 deletions
|
|
@ -92,50 +92,54 @@ abstract class JournalSpec(config: Config) extends PluginSpec(config) {
|
|||
"replay all messages" in {
|
||||
journal ! ReplayMessages(1, Long.MaxValue, Long.MaxValue, pid, receiverProbe.ref)
|
||||
1 to 5 foreach { i ⇒ receiverProbe.expectMsg(replayedMessage(i)) }
|
||||
receiverProbe.expectMsg(ReplayMessagesSuccess)
|
||||
receiverProbe.expectMsg(ReplayMessagesSuccess(highestSequenceNr = 5L))
|
||||
}
|
||||
"replay messages using a lower sequence number bound" in {
|
||||
journal ! ReplayMessages(3, Long.MaxValue, Long.MaxValue, pid, receiverProbe.ref)
|
||||
3 to 5 foreach { i ⇒ receiverProbe.expectMsg(replayedMessage(i)) }
|
||||
receiverProbe.expectMsg(ReplayMessagesSuccess)
|
||||
receiverProbe.expectMsg(ReplayMessagesSuccess(highestSequenceNr = 5L))
|
||||
}
|
||||
"replay messages using an upper sequence number bound" in {
|
||||
journal ! ReplayMessages(1, 3, Long.MaxValue, pid, receiverProbe.ref)
|
||||
1 to 3 foreach { i ⇒ receiverProbe.expectMsg(replayedMessage(i)) }
|
||||
receiverProbe.expectMsg(ReplayMessagesSuccess)
|
||||
receiverProbe.expectMsg(ReplayMessagesSuccess(highestSequenceNr = 5L))
|
||||
}
|
||||
"replay messages using a count limit" in {
|
||||
journal ! ReplayMessages(1, Long.MaxValue, 3, pid, receiverProbe.ref)
|
||||
1 to 3 foreach { i ⇒ receiverProbe.expectMsg(replayedMessage(i)) }
|
||||
receiverProbe.expectMsg(ReplayMessagesSuccess)
|
||||
receiverProbe.expectMsg(ReplayMessagesSuccess(highestSequenceNr = 5L))
|
||||
}
|
||||
"replay messages using a lower and upper sequence number bound" in {
|
||||
journal ! ReplayMessages(2, 4, Long.MaxValue, pid, receiverProbe.ref)
|
||||
2 to 4 foreach { i ⇒ receiverProbe.expectMsg(replayedMessage(i)) }
|
||||
receiverProbe.expectMsg(ReplayMessagesSuccess)
|
||||
receiverProbe.expectMsg(ReplayMessagesSuccess(highestSequenceNr = 5L))
|
||||
}
|
||||
"replay messages using a lower and upper sequence number bound and a count limit" in {
|
||||
journal ! ReplayMessages(2, 4, 2, pid, receiverProbe.ref)
|
||||
2 to 3 foreach { i ⇒ receiverProbe.expectMsg(replayedMessage(i)) }
|
||||
receiverProbe.expectMsg(ReplayMessagesSuccess)
|
||||
receiverProbe.expectMsg(ReplayMessagesSuccess(highestSequenceNr = 5L))
|
||||
}
|
||||
"replay a single if lower sequence number bound equals upper sequence number bound" in {
|
||||
journal ! ReplayMessages(2, 2, Long.MaxValue, pid, receiverProbe.ref)
|
||||
2 to 2 foreach { i ⇒ receiverProbe.expectMsg(replayedMessage(i)) }
|
||||
receiverProbe.expectMsg(ReplayMessagesSuccess)
|
||||
receiverProbe.expectMsg(ReplayMessagesSuccess(highestSequenceNr = 5L))
|
||||
}
|
||||
"replay a single message if count limit equals 1" in {
|
||||
journal ! ReplayMessages(2, 4, 1, pid, receiverProbe.ref)
|
||||
2 to 2 foreach { i ⇒ receiverProbe.expectMsg(replayedMessage(i)) }
|
||||
receiverProbe.expectMsg(ReplayMessagesSuccess)
|
||||
receiverProbe.expectMsg(ReplayMessagesSuccess(highestSequenceNr = 5L))
|
||||
}
|
||||
"not replay messages if count limit equals 0" in {
|
||||
journal ! ReplayMessages(2, 4, 0, pid, receiverProbe.ref)
|
||||
receiverProbe.expectMsg(ReplayMessagesSuccess)
|
||||
receiverProbe.expectMsg(ReplayMessagesSuccess(highestSequenceNr = 5L))
|
||||
}
|
||||
"not replay messages if lower sequence number bound is greater than upper sequence number bound" in {
|
||||
journal ! ReplayMessages(3, 2, Long.MaxValue, pid, receiverProbe.ref)
|
||||
receiverProbe.expectMsg(ReplayMessagesSuccess)
|
||||
receiverProbe.expectMsg(ReplayMessagesSuccess(highestSequenceNr = 5L))
|
||||
}
|
||||
"not replay messages if the persistent actor has not yet written messages" in {
|
||||
journal ! ReplayMessages(0, Long.MaxValue, Long.MaxValue, "non-existing-pid", receiverProbe.ref)
|
||||
receiverProbe.expectMsg(ReplayMessagesSuccess(highestSequenceNr = 0L))
|
||||
}
|
||||
"not replay permanently deleted messages (range deletion)" in {
|
||||
val receiverProbe2 = TestProbe()
|
||||
|
|
@ -152,18 +156,6 @@ abstract class JournalSpec(config: Config) extends PluginSpec(config) {
|
|||
receiverProbe2.expectNoMsg(200.millis)
|
||||
}
|
||||
|
||||
"return a highest stored sequence number > 0 if the persistent actor has already written messages and the message log is non-empty" in {
|
||||
journal ! ReadHighestSequenceNr(3L, pid, receiverProbe.ref)
|
||||
receiverProbe.expectMsg(ReadHighestSequenceNrSuccess(5))
|
||||
|
||||
journal ! ReadHighestSequenceNr(5L, pid, receiverProbe.ref)
|
||||
receiverProbe.expectMsg(ReadHighestSequenceNrSuccess(5))
|
||||
}
|
||||
"return a highest stored sequence number == 0 if the persistent actor has not yet written messages" in {
|
||||
journal ! ReadHighestSequenceNr(0L, "non-existing-pid", receiverProbe.ref)
|
||||
receiverProbe.expectMsg(ReadHighestSequenceNrSuccess(0))
|
||||
}
|
||||
|
||||
"reject non-serializable events" in {
|
||||
// there is no chance that a journal could create a data representation for type of event
|
||||
val notSerializableEvent = new Object { override def toString = "not serializable" }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue