akka/akka — pull request #1700 by krasserm (2013-09-02 16:33:27+00:00)
Title: akka-persistence prototype

The most prominent changes compared to eventsourced are:

- No central processor and channel registry any more
- Ability to auto-recover processors on start and restart
- Recovery of processor networks doesn't require coordination
- Explicit channel activation not needed any more
- Message sequence numbers generated per processor (no gaps)
- Sender references are journaled along with messages
- Processors can determine their recovery status
- No custom API on extension object, only messages
- Journal created by extension from config, not by application
- Applications only interact with processors and channels via messages
- Internal design prepared for having processor-specific journal actors (for later optimization possibilities)

This prototype has the following limitations:

- Serialization of persistent messages and their payload via JavaSerializer only (will be configurable later)
- The LevelDB journal implementation based on a LevelDB Java port, not the native LevelDB (will be configurable later)
- The discussed 'interceptor' functionality is based on a preliminary implementation (affects Actor and ActorCell, passes all actor-actor-tests but no performance measurements made)

The following features are out of scope and will be added later using separate tickets:

- Snapshot-based recovery
- Reliable channels
- Journal plugin API
- Optimizations

Further notes:

- Initial API docs written
- User documentation (Scala and Java) available (as a basis for an initial API review)
- Runnable examples (Scala and Java) provided by akka-sample-persistence
- Automated tests cover only basic functionality (will be extended later)
- Code associated with documentation are no real tests yet (will be changed later)