akka-persistence に scala api を使用して、ツリーに編成されたアクター インスタンスのグループを永続化しています。ツリー内の各ノードは永続的なアクターであり、「ルート」ノードからそのノードへのパスに基づいて名前が付けられます。名前には persistenceId が設定されます。たとえば、ルート ノード アクターには persistenceId 'root' があります。次にダウンしたノードには、persistenceId 'root-europe' があります。別のアクターが persistenceId 'root-europe-italy' を持っている可能性があります。
各アクターの状態には、その子の名前のリストが含まれています。たとえば、「ルート」アクターは、その状態の一部として「ヨーロッパ」、「アジア」などのリストを維持します。
このシステムのスナップショットを実装しました。ルートがスナップショットをトリガーされると、スナップショットが実行され、各子に同じことを行うように指示されます。
この問題は、スナップショット リカバリ中に発生します。persistenceId = 'root' でアクターを再作成すると (名前をコンストラクター パラメーターとして渡すことによって)、そのアクターが受け取る SnapshotOffer イベントが正しくありません。たとえば、「root-europe-italy....」です。これは、persistenceId が回復されるアクターの状態を識別するという、永続化の契約の矛盾のようです。ノード アクター (「italy-europe-root」など) の persistenceId を逆にすることでこの問題を回避したので、これは永続モジュールによってファイルが取得される方法に関連しているようです。最初に他のアプローチを試したことに注意してください。たとえば、ノード名の間にさまざまなセパレーターを使用したり、セパレーターをまったく使用したりしませんでした。
他の誰かがこの問題を経験したことがありますか? akka-persistence 開発者は、なぜこれが起こったのかを理解するのに役立ちますか?
ところで: 今のところ、組み込みのファイルベースのスナップショット ストレージを使用しています。
ありがとう。