v-0.5
Closed tickets
All tickets closed in this release are listed here.
New features
- New event sourcing abstractions
- Event-sourced actors can persist new events during event handling (#126)
- This requires the
PersistOnEvent
mixin - It is especially useful for event collaboration use cases
- This requires the
- Event log storage provider interface (#95) for custom storage backends defined and internally implemented by
onEvent
automatically called after successfulpersist
(#93)- Logical and physical deletion of events (#91)
- Handler-specific behavior stacks (#90)
- Recovery completion handler as described in state recovery (#108)
Enhancements
- Detailed failure handling section added to the reference documentation
- Improve failure handling in Cassandra event log (#138 and #139)
- Stop event-sourced actors if their event log is stopped (#191)
- Batching of replication and processor writes (#136)
- Protobuf compilation during build (#72)
- Command handlers can now be defined as
def onCommand = { ... }
instead ofval onCommand: Receive = { ... }
- Event handlers can now be defined as
def onEvent = { ... }
instead ofval onEvent: Receive = { ... }
- Snapshot handlers can now be defined as
def onSnapshot = { ... }
instead ofval onSnapshot: Receive = { ... }
Bug fixes
CassandraEventLog
fails in eventuate-chaos test scenarios (#174)- Disaster recovery of endpoints terminates too early (#152)
- Command stashing does not work properly (#182)
Dependency upgrades
- Akka 2.4.1
Breaking changes
-
onEvent
is now automatically called after successfulpersist
(#93). Therefore, applications must remove explicitonEvent
calls from theirpersist
handlers i.e.persist(event) { case Success(evt) => onEvent(evt) // ... case Failure(cause) => // ... }
must be changed to
persist(event) { case Success(evt) => // ... case Failure(cause) => // ... }
-
ConditionalCommand
renamed toConditionalRequest
(#92) -
ConditionalCommands
renamed toConditionalRequests
(#92) -
Event-sourced actors, views, writers and processors only accept conditional requests if they additionally extend the
ConditionalRequests
trait (#137) e.g.class ExampleActor extends EventsourcedActor with ConditionalRequests { // ... }
An actor that does not extend
ConditionalRequests
throws aConditionalRequestException
if it receives aConditionalRequest
. In earlier versions, conditional requests have been accepted by event-sourced actors and views by default. For further details, see section Conditional requests in the user guide. -
Method
onRecovered(): Unit
ofEventsourcedView
changed toonRecovery: Handler[Unit]
(#108) -
BatchingEventLog
renamed toBatchingLayer
-
ReplicationProtocol.GetTimeTracker
renamed toReplicationProtocol.GetEventLogClock
-
ReplicationProtocol.GetTimeTrackerSuccess
renamed toReplicationProtocol.GetEventLogClockSuccess
-
A
ReplicationEndpoint
must not be explicitly activated after recovery (activate()
is called internally byrecover()
) (#152) -
Configuration parameter changes
eventuate.log.replication.retry-interval
renamed toeventuate.log.replication.retry-delay
eventuate.log.replication.read-timeout
renamed toeventuate.log.replication.remote-read-timeout
eventuate.log.replication.write-timeout
replaced byeventuate.log.write-timeout
eventuate.log.replication.batch-size-max
replaced byeventuate.log.write-batch-size
eventuate.log.batching.batch-size-limit
replaced byeventuate.log.write-batch-size
eventuate.log.cassandra.init-retry-backoff
renamed toeventuate.log.cassandra.init-retry-delay
eventuate.log.cassandra.partition-size-max
renamed toeventuate.log.cassandra.partition-size
event.log.leveldb.read-dispatcher
renamed toevent.log.dispatchers.read-dispatcher
event.log.leveldb.write-dispatcher
renamed toevent.log.dispatchers.write-dispatcher
event.log.cassandra.read-dispatcher
renamed toevent.log.dispatchers.read-dispatcher
event.log.cassandra.write-dispatcher
renamed toevent.log.dispatchers.write-dispatcher
eventuate.disaster-recovery.*
renamed toeventuate.log.recovery.*
-
Events stored with previous versions cannot be processed with this version.
Contributors
Many thanks to
- Gregor Uhlenheuer for #138 and the chaos testing infrastructure in eventuate-chaos
- Jens Rieks for #151