Skip to content

Instantly share code, notes, and snippets.

@dos65
Last active January 18, 2017 00:34
Show Gist options
  • Save dos65/2ba9fcd4c26d5dbed13d1f49a93dfd58 to your computer and use it in GitHub Desktop.
Save dos65/2ba9fcd4c26d5dbed13d1f49a93dfd58 to your computer and use it in GitHub Desktop.
persistent become
case class Message()
class PActor extends PersistentActor with ActorLogging {
override def persistenceId: String = "test"
override def receiveRecover: Receive = recovery(0)
def recovery(count: Int): Receive = {
case RecoveryCompleted =>
log.info(s"Currently have: ${count}")
log.info("Recovery completed!")
case m: Message =>
log.info(s"Count: {}", count)
context.become(recovery(count + 1))
}
override def receiveCommand: Receive = {
case m: Message =>
persist(m)(_ => log.info("persisted"))
}
}
object Main extends App {
val system = ActorSystem("test", ConfigFactory.defaultApplication())
val ref = system.actorOf(Props(classOf[PActor]))
(1 to 3).foreach(_ => ref ! Message())
}
/* first run
[INFO] [01/18/2017 03:27:10.850] [test-akka.actor.default-dispatcher-4] [akka://test/user/$a] Currently have: 0
[INFO] [01/18/2017 03:27:10.851] [test-akka.actor.default-dispatcher-4] [akka://test/user/$a] Recovery completed!
[INFO] [01/18/2017 03:27:10.939] [test-akka.actor.default-dispatcher-3] [akka://test/user/$a] persisted
[INFO] [01/18/2017 03:27:10.955] [test-akka.actor.default-dispatcher-4] [akka://test/user/$a] persisted
[INFO] [01/18/2017 03:27:10.966] [test-akka.actor.default-dispatcher-2] [akka://test/user/$a] persisted
*/
/* second run
[INFO] [01/18/2017 03:28:16.821] [akka://test/user/$a] Count: 0
[INFO] [01/18/2017 03:28:16.822] [akka://test/user/$a] Count: 0 <----- should print "Count: 1"
[INFO] [01/18/2017 03:28:16.822] [akka://test/user/$a] Count: 0
[INFO] [01/18/2017 03:28:16.824] [akka://test/user/$a] Currently have: 0
[INFO] [01/18/2017 03:28:16.824] [akka://test/user/$a] Recovery completed!
[INFO] [01/18/2017 03:28:16.825] [akka://test/user/$a] Count: 1 <----- should use receiveCommand, but it stayed in receiveRecover
[INFO] [01/18/2017 03:28:16.826] [akka://test/user/$a] Count: 2
[INFO] [01/18/2017 03:28:16.826] [akka://test/user/$a] Count: 3
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment