在Akka中初始化失败时重新启动leveldb

时间:2019-02-04 14:05:55

标签: akka leveldb akka-persistence

我的应用程序的设计方式使得无论何时有人尝试启动它,该应用程序都会关闭自身的其他实例。 (请注意,此操作按预期工作,不应更改)。

我正在使用Akka,我的Actor之一是使用PersistentActor的{​​{1}}。

应用程序启动时会锁定leveldb,再次启动时<path-to-lock>/LOCK无法锁定文件,因此leveldb无法启动。

经过一番检查,我发现PersistentActor leveldb类是Actor,并且它在LeveldbJournal下以路径system guardian开始。

我希望akka://actor-system/system/akka.persistence.journal.leveldb自行重启,直到可以锁定文件或达到最大重试次数为止。

日志:

leveldb

[ERROR] [02/04/2019 15:39:25.731] [operator-actor-system-akka.actor.default-dispatcher-5] [akka://operator-actor-system/system/akka.persistence.journal.leveldb] Unable to acquire lock on '<path-to-lock>/LOCK' akka.actor.ActorInitializationException: akka://operator-actor-system/system/akka.persistence.journal.leveldb: exception during creation at akka.actor.ActorInitializationException$.apply(Actor.scala:180) at akka.actor.ActorCell.create(ActorCell.scala:607) at akka.actor.ActorCell.invokeAll$1(ActorCell.scala:461) at akka.actor.ActorCell.systemInvoke(ActorCell.scala:483) at akka.dispatch.Mailbox.processAllSystemMessages(Mailbox.scala:282) at akka.dispatch.Mailbox.run(Mailbox.scala:223) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: java.io.IOException: Unable to acquire lock on '<path-to-lock>/LOCK' at org.iq80.leveldb.impl.DbLock.<init>(DbLock.java:55) at org.iq80.leveldb.impl.DbImpl.<init>(DbImpl.java:167) at org.iq80.leveldb.impl.Iq80DBFactory.open(Iq80DBFactory.java:59) at akka.persistence.journal.leveldb.LeveldbStore$class.preStart(LeveldbStore.scala:178) at akka.persistence.journal.leveldb.LeveldbJournal.preStart(LeveldbJournal.scala:23) at akka.actor.Actor$class.aroundPreStart(Actor.scala:510) at akka.persistence.journal.leveldb.LeveldbJournal.aroundPreStart(LeveldbJournal.scala:23) at akka.actor.ActorCell.create(ActorCell.scala:590) ... 7 more 重新启动时:

PersistentActor

谢谢

Ido Sorozon

P.S。版本:

[ERROR] [02/04/2019 15:39:57.168] [operator-actor-system-akka.actor.default-dispatcher-16] [akka://operator-actor-system/user/controller/view-manager/records-service-api-supervisor/records-service-api] Persistence failure when replaying events for persistenceId [record-service-persistence-actor]. Last known sequence number [0] (akka.persistence.RecoveryTimedOut)

0 个答案:

没有答案