Releases: RBMHTechnology/eventuate
v-0.10
Closed tickets
All tickets closed in this release are listed here.
Bug fixes
- Potentially Inconsistent EventLogClock snapshot in Cassandra backend in case of disaster recovery (#393)
Dependency upgrades
- Upgrade to Akka 2.5.7 (#390)
Breaking changes
-
Akka 2.5 introduced the following incompatible changes in the Java-API
- ReceiveBuilder:
- explicit create step required
- builds
AbstractActor.Receive
instead ofActor.Receive
- Match.match: Changes in type parameters
To adjust to these changes the Java-API of Eventuate is streamlined
and mirrors the new Akka Java-API by removing allsetOn...
-methods
used to defined the actor's behavior and replaces these methods with
createOn...
-variants which can be used to define custom behavior
by returning the behavior definition wrapped in an instance of
AbstractActor.Receive
. - ReceiveBuilder:
Contributors
- Many thanks to @cstub for your contributions!
v-0.9
Closed tickets
All tickets closed in this release are listed here.
New features and enhancements
- Limit number of ReplicationDue sent per ReplicationRead (#364)
- Allow EventsourcedProcessor to emit events with custom aggregation IDs (#370)
Bug fixes
- Persist on event may persist events again in case of disaster recovery (#385). Note the problem is only fixed for event logs written with a eventuate >=0.9 release. Confirmation events for persist on event requests that have been written before may still fail to confirm a request if they have been restored through disaster recovery. So after an upgrade to 0.9 the application should make a backup of the event log to make sure those old confirmation events do not get lost through a disaster.
Breaking changes
- Support for remote replication filters is dropped (#297). They have to be replaced by corresponding local replication filters. If a distributed application is upgraded non-atomically this may require a two step approach to ensure that filtering is always in place:
- Keep dependency on previous Eventuate release and add for each remote replication filter (defined at a target location) a corresponding local replication filter (to the source location) and upgrade affected locations.
- Upgrade to new Eventuate release, remove all remote replication filters and upgrade all locations.
- Due to fix for #385
DurableEvent.id
returnsEventId
instead ofVectorTime
. TheVectorTime
can still be accessed throughDurableEvent.vectorTimestamp
.
Contributors
- Many thanks to @danbim, @kongo2002, @mslinn, @Tvaroh for your contributions!
v-0.8.1
Closed tickets
All tickets closed in this release are listed here.
Dependency upgrades
- All Eventuate artifacts are now cross-compiled with Scala 2.11 and 2.12.
eventuate-adapter-spark
adapter is only available for Scala 2.11 at the moment.
Contributors
- Many thanks to Odd Möller for your contributions!
v-0.8
Closed tickets
All tickets closed in this release are listed here.
New features and enhancements
- Adapters
- Target log scoped local replication filters (#273)
- Replay from application-defined sequence number (#302)
- Replay fault-tolerance (#352)
- Faster recovery from older snapshots (#309)
- Disaster recovery enhancements (#286)
- Support for Cassandra 3.x (#149)
Bug fixes
StatefulProcessor
doesn't properly recover state (#277)EventsourcedProcessor
doesn't respecteventuate.log.write-batch-size
(#329)
Dependency upgrades
- Scala 2.11.8
- Akka 2.4.12
Breaking changes
- Discontinue support for actor-level causality tracking (#280). The
sharedClockEntry
method has been removed from the public API. AllEventsourcedActor
s that share a local event log- also share the same entry in the log-level (= server-side) vector clock
- are guaranteed to receive events in the same order, both, during live processing and event replay
- API for local replication filters changed to distinguish between source log (defined by log name) and target log (defined by target log id) specific filters (#273). See scala doc of ReplicationEndpoint and EndpointFilters for details.
DurableEvent(emitterId: String)
constructor replaced byDurableEvent(payload: Any)
. That's a semantic change that is not detected by the compiler.
Contributors
- Many thanks to Christoph Stumpf, Dan Di Spaltro, Daniel Bimschas, Gregor Uhlenheuer, Martin Grotzke and Volker Stampa for your contributions!
v-0.7.1
Closed tickets
All tickets closed in this release are listed here.
New features and enhancements
- Overview and Architecture sections of the Eventuate documentation have been completely revised (#235, #262). There is now a stronger focus on Eventuate's event collaboration and event bus functionality.
- Failed disaster recovery should indicate whether partial updates have been made (#260).
Breaking changes
EventsourcedView
does not extendActorLogging
any more (#259). Application-specificEventsourced*
implementation classes that used the inheritedlog: LoggingAdapter
so far should now uselogger: LoggingAdapter
or define their own logging adapter.
v-0.7
Closed tickets
All tickets closed in this release are listed here.
New features and enhancements
- Reliable delivery now stores
deliveryId
in event metadata instead of domain events (#244) - Local replication filters help locations to prevent replication of location-specific events (#245)
- Report replication endpoint with incompatible application version as unavailable (#222)
- User guide extended to include Java code examples (#258)
- Java version of Query DB example (#238)
- Shopping cart CRDT (#114)
- CRDT services Java API (#258)
- Further CRDT enhancements (#170, #171, #172)
Bug fixes
- Upper bound on source log scan progress per replication-read request (#236)
- Native LevelDB event log crashes JVM on shutdown frequently in tests (#234)
Dependency upgrades
- Akka 2.4.4
- Cassandra driver 2.1.9
Breaking changes
- The ConfirmedDelivery API has been changed to free application from storing a
deliveryId
in application-specific events (see reliable delivery for a simple example). Migration: instead of storing confirmation events withpersist
, applications should now callpersistConfirmation
. Theconfirm
method, called in previous versions during confirmation event handling, is now obsolete and has been removed from the public API. - Persistent CRDT events and snapshots written with version 0.6 cannot be read with this version. All other events and snapshots can be read.
- The API of the Unavailable failure detector event has been extended to include a
causes: Seq[Throwable]
field for reporting unavailability causes (see failure detection for details). - Several breaking changes have been made to the replication protocol. This only affects applications that directly use ReplicationProtocol messages.
v-0.6
Closed tickets
All tickets closed in this release are listed here.
New features and enhancements
- Eventuate is now a multi-module project (#169)
- Java API enhancements (#204)
- See also Java example application and Java tests
- Documentation is still work in progress (#233)
- Support for incremental updates of multi-location applications using versioned replication endpoints (#218)
- Support for serializers with string manifest (#207)
- Support for using
last*
methods in event handler pattern guards (#205)
Bug fixes
LevelDbEventLog
cannot correctly restoreEventLogClock
after event deletion (#214)PersistOnEventRequest
not properly recovered from snapshot (#209)
Dependency upgrades
- Akka 2.4.2
Breaking changes
- Structure of Versioned data type changed.
- Events stored with previous versions cannot be processed with this version
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
v-0.4
Closed tickets
All tickets closed in this release are listed here.
New features
- Support for cyclic replication networks (based on a complete re-write of the event replication mechanism)
- Disaster recovery of replication endpoints
- Disaster recovery example implementation
- Event replay backpressure
- CRDT instance snapshots
- LWW-Register CRDT
Enhancements
- Isolation of Cassandra log and index reads
- Lazy load and recovery of CRDT instances
- Reference documentation TOC expanded
- Example application startup scripts enhancements
Dependency upgrades
- Akka 2.4.0
Breaking changes
ReplicationEndpoint
s must now be activated withactivate()
to initiate event replication.- Events stored with previous versions cannot be processed with this version.
Contributors
Many thanks to
- Ian Clegg for contributing the LWW-Register CmRDT.
- Gregor Uhlenheuer for the example startup script enhancements.
- Sebastian Hundt for fixing redundant object allocations.
v-0.3
Closed tickets
All tickets closed in this release are listed here.
New features
- Causality tracking has been completely revised and is described in section vector clocks of the project documentation.
Enhancements
- Project documentation sections introduction, architecture, user guide and reference have been revised.
- Comprehensive internal refactorings and implementation enhancements.
Breaking changes
- Data that have been written with earlier versions can not be processed with version 0.3.
Contributors
Many thanks to all contributors, especially