Skip to content

Releases: eventflow/EventFlow

v0.30.2019

16 Jun 07:05
Compare
Choose a tag to compare
  • Breaking: To simplify the EventFlow NuGet package structure, the two NuGet
    packages EventFlow.EventStores.MsSql and EventFlow.ReadStores.MsSql have
    been discontinued and their functionality move to the existing package
    EventFlow.MsSql. The embedded SQL scripts have been made idempotent making
    the upgrade a simple operation of merely using the new name spaces. To make
    the upgrade easier, the deprecated NuGet packages will still be uploaded,
    but will not contain anything
  • Fixed: When configuring Elasticsearch and using the overload of
    ConfigureElasticsearch that takes multiple of URLs, SniffingConnectionPool
    is now used instead of StaticConnectionPool and with sniff life span of five
    minutes

v0.29.1973

19 Apr 18:01
Compare
Choose a tag to compare
  • Breaking: IAggregateRoot has some breaking changes. If these methods aren't
    used (which is considered the typical case), then the base class
    AggregateRoot<,,> will automatically handle it
    • CommitAsync has an additional ISnapshotStore parameter. If you don't
      use snapshot aggregates, then you can safely pass null
    • LoadAsync is a new method that lets the aggregate control how its
      loaded fromt the event- and snapshot stores
  • New core feature: EventFlow now support snapshot creation for aggregate
    roots. The EventFlow documentation has been updated to include a guide on
    how to get started using snapshots. Snapshots are basically an opt-in optimized
    method for handling long-lived aggregate roots. Snapshot support in EventFlow
    introduces several new elements, read the documentation to get an overview.
    Currently EventFlow offers the following snapshot stores
    • In-memory
    • Microsoft SQL Server
  • New: The IAggregateStore is introduced, which provides a cleaner interface
    for manipulating aggregate roots. The most important method is the
    UpdateAsync which allows easy updates to aggregate roots without the need
    for a command and command handler
    • LoadAsync
    • UpdateAsync
    • StoreAsync
  • New: IEventStore now supports loading events from a specific version using
    the new overload of LoadEventsAsync that takes a fromEventSequenceNumber
    argument
  • New: IMsSqlDatabaseMigrator now has a overloaded method named
    MigrateDatabaseUsingScripts that takes an IEnumerable<SqlScript>
    enabling specific scripts to be used in a database migration
  • New: Added suport to use EventStore persistence with connection strings
    instead IPs only
  • Obsolete: The following aggregate related methods on IEventStore has been
    marked as obsolete in favor of the new IAggregateStore. The methods will be
    removed at some point in the future
    • LoadAggregateAsync
    • LoadAggregate

v0.28.1852

05 Apr 19:35
Compare
Choose a tag to compare
  • Critical fix: OptimisticConcurrencyRetryStrategy now correctly only
    states that OptimisticConcurrencyException should be retried. Before
    ALL exceptions from the event stores were retried, not only the transient!
    If you have inadvertently become dependent on this bug, then implement your
    own IOptimisticConcurrencyRetryStrategy that has the old behavior
  • Fixed: OptimisticConcurrencyRetryStrategy has a off-by-one error that caused
    it to retry one less that it actually should
  • Fixed: Prevent abstract ICommandHandler<,,,> from being registered in
    EventFlowOptionsCommandHandlerExtensions.AddCommandHandlers(...)
  • Fixed: Prevent abstract IEventUpgrader<,> from being registered in
    EventFlowOptionsEventUpgradersExtensions.AddEventUpgraders(...)
  • Fixed: Prevent abstract IMetadataProvider from being registered in
    EventFlowOptionsMetadataProvidersExtensions.AddMetadataProviders(...)
  • Fixed: Prevent abstract IQueryHandler<,> from being registered in
    EventFlowOptionsQueriesExtensions.AddQueryHandlers(...)
  • Fixed: Prevent abstract ISubscribeSynchronousTo<,,> from being registered in
    EventFlowOptionsSubscriberExtensions.AddSubscribers(...)

v0.27.1765

25 Feb 06:03
Compare
Choose a tag to compare
  • New: Configure Hangfire job display names by implementing
    IJobDisplayNameBuilder. The default implementation uses job description
    name and version

v0.26.1714

20 Feb 20:29
Compare
Choose a tag to compare
  • Breaking: Renamed MssqlMigrationException to SqlMigrationException
  • Breaking: Renamed SqlErrorRetryStrategy to MsSqlErrorRetryStrategy
    as its MSSQL specific
  • Breaking: The NuGet package Dapper is no longer IL merged with the package
    EventFlow.MsSql but is now listed as a NuGet dependency. The current
    version used by EventFlow is v1.42
  • New: Introduced the NuGet package EventFlow.SQLite that adds event store
    support for SQLite databases, both as event store and read model store
  • New: Introduced the NuGet package EventFlow.Sql as shared package for
    EventFlow packages that uses SQL
  • New: Its now possible to configure the retry delay for MSSQL transient
    errors using the new IMsSqlConfiguration.SetTransientRetryDelay. The
    default is a random delay between 50 and 100 milliseconds

v0.25.1695

15 Feb 19:25
Compare
Choose a tag to compare
  • Fixed: Deadlock in AsyncHelper if e.g. an exception caused no async tasks
    to be scheduled. The AsyncHelper is used by EventFlow to expose non-async
    methods to developers and provide the means to call async methods from
    a synchronous context without causing a deadlock. There's no change to any of
    the async methods.

    The AsyncHelper is used in the following methods.

    • ICommandBus.Publish
    • IEventStore.LoadEvents
    • IEventStore.LoadAggregate
    • IEventStore.LoadAllEvents
    • IJobRunner.Execute
    • IReadModelPopulator.Populate
    • IReadModelPopulator.Purge
    • IQueryProcessor.Process

v0.24.1563

25 Jan 06:44
Compare
Choose a tag to compare
  • Breaking: The following NuGet references have been updated
    • EventStore.Client v3.4.0 (up from v3.0.2)
    • Hangfire.Core v1.5.3 (up from v1.4.6)
    • RabbitMQ.Client v3.6.0 (up from v3.5.4)
  • New: EventFlow now uses Paket to manage NuGet packages
  • Fixed: Incorrect use of EventStore.Client that caused it to throw
    WrongExpectedVersionException when committing aggregates multiple times
  • Fixed: Updated NuGet package titles of the following NuGet packages to
    contain assembly name to get a better overview when searching on
    nuget.org
    • EventFlow.RabbitMQ
    • EventFlow.EventStores.EventStore
  • Fixed: Updated internal NuGet reference dbup to v3.3.0 (up from v3.2.1)

v0.23.1470

05 Dec 13:17
Compare
Choose a tag to compare
  • Breaking: EventFlow no longer ignores columns named Id in MSSQL read models.
    If you were dependent on this, use the MsSqlReadModelIgnoreColumn attribute
  • Fixed: Instead of using MethodInfo.Invoke to call methods on reflected
    types, e.g. when a command is published, EventFlow now compiles an expression
    tree instead. This has a slight initial overhead, but provides a significant
    performance improvement for subsequent calls
  • Fixed: Read model stores are only invoked if there's any read model updates
  • Fixed: EventFlow now correctly throws an ArgumentException if EventFlow has
    been incorrectly configure with known versioned types, e.g. an event
    is emitted that hasn't been added during EventFlow initialization. EventFlow
    would handle the save operation correctly, but if EventFlow was reinitialized
    and the event was loaded before it being emitted again, an exception would
    be thrown as EventFlow would know which type to use. Please make sure to
    correctly load all event, command and job types before use
  • Fixed: IReadModelFactory<>.CreateAsync(...) is now correctly used in
    read store mangers
  • Fixed: Versioned type naming convention now allows numbers

v0.22.1393

19 Nov 06:22
Compare
Choose a tag to compare
  • New: To customize how a specific read model is initially created, implement
    a specific IReadModelFactory<> that can bootstrap that read model
  • New: How EventFlow handles MSSQL read models has been refactored to allow
    significantly more freedom to developers. MSSQL read models are no longer
    required to implement IMssqlReadModel, only the empty IReadModel
    interface. Effectively, this means that no specific columns are required,
    meaning that the following columns are no longer enforced on MSSQL read
    models. Use the new required MsSqlReadModelIdentityColumn attribute to mark
    the identity column and the optional (but recommended)
    MsSqlReadModelVersionColumn to mark the version column.
    • string AggregateId
    • DateTimeOffset CreateTime
    • DateTimeOffset UpdatedTime
    • int LastAggregateSequenceNumber
  • Obsolete: IMssqlReadModel and MssqlReadModel. Developers should instead
    use the MsSqlReadModelIdentityColumn and MsSqlReadModelVersionColumn
    attributes to mark the identity and version columns (read above).
    EventFlow will continue to support IMssqlReadModel, but it will be
    removed at some point in the future
  • Fixed: Added missing UseElasticsearchReadModel<TReadModel, TReadModelLocator>()
    extension

v0.21.1312

26 Oct 05:45
Compare
Choose a tag to compare
  • New: Added Identity<>.NewComb() that creates sequential unique IDs which can
    be used to minimize database fragmentation
  • New: Added IReadModelContext.Resolver to allow read models to fetch
    additional resources when events are applied
  • New: The PrettyPrint() type extension method, mostly used for verbose
    logging, now prints even prettier type names, e.g.
    KeyValuePair<Boolean,Int64> instead of merely KeyValuePair'2, making log
    messages slightly more readable