Skip to content

Latest commit

 

History

History
840 lines (565 loc) · 48.7 KB

CHANGELOG.md

File metadata and controls

840 lines (565 loc) · 48.7 KB

Changelog

The repo is versioned based on SemVer 2.0 using the tiny-but-mighty MinVer from @adamralph. See here for more information on how it works.

All notable changes to this project will be documented in this file. The format is based on Keep a Changelog.

The Unreleased section name is replaced by the expected version of next release. A stable version's log contains all changes between that version and the previous stable version (can duplicate the prereleases logs).

Added

  • Equinox.CosmosStore: Group metrics by Container Name #449
  • Equinox.CosmosStore: Group metrics by Category; split out Tip activity #453
  • Equinox.CosmosStore: Support Ingesting unfolds #460
  • Equinox.CosmosStore.EventsContext.Sync: Support syncing of unfolds #460
  • eqx stats: -O, -N flags extract oldest and newest _ts within a store #459
  • eqx: -Q flag omits timestamps from console output logging #459

Changed

  • Equinox.*Store,Equinox.*Store.Prometheus: Pin Equinox dependencies to [4.0.0, 5.0.0)] #448
  • Equinox.CosmosStore: Update System.Text.Json dep to 6.0.10 per CVE-2024-43485 #470
  • Equinox.MessageDb: Up min Npgsql to v 7.0.7 as 7.0.0 is on CVE blacklist

Removed

  • eqx stats: -A (all stats) is now the default unless you specify >=1 of the individual stats via ESDNO flags #459

Fixed

4.0.4 - 2024-05-08

Added

  • Equinox.Core.Batcher: Add Settable Linger #454

4.0.3 - 2024-04-11

Fixed

  • Equinox: LoadOption.AnyCachedValue, LoadOption.AllowStale prevent yielding of superseded value where overlapping call in flight #452
  • Equinox: LoadOption.AnyCachedValue, LoadOption.AllowStale prevent incorrect TaskCanceledException outcome where overlapping call cancelled #452
  • Equinox: LoadOption.AnyCachedValue, LoadOption.AllowStale correct to ensure optimal loading where first flight was in progress #452

4.0.2 - 2024-04-08

Fixed

  • Equinox: LoadOption.AnyCachedValue, LoadOption.AllowStale caches and continually yields TaskCanceledException where request cancelled #451

4.0.0 - 2024-03-20

Added

  • Equinox: Decider.Transact, TransactEx overloads #325
  • Equinox.LoadOption.RequireLeader: support for requesting a consistent read of a stream #341
  • Equinox.LoadOption.AllowStale: Read mode that limits reads to a maximum of one retrieval per the defined time window #386
  • Equinox.Category base class, with Decider and Stream helper modules #337
  • Equinox.DeciderCore: C# friendly equivalent of Decider (i.e. Func and Task) #338
  • Equinox.ISyncContext.StreamEventBytes: Exposes stored size of events in the stream (initial impl provides it for DynamoStore only) #326
  • Equinox.Core.Batching: BatcherDictionary, BatcherCache to host concurrent Batchers #390
  • Equinox.Core.Batching: Add limiter: SemaphoreSlim argument to extend linger phase #427
  • CosmosStore.CosmosStoreConnector: Connect, ConnectAsync #421
  • CosmosStore.Exceptions: Active patterns to simplify classification in the context of Propulsion handlers #416
  • CosmosStore.Prometheus: Add rut tag to enable filtering/grouping by Read vs Write activity as per DynamoStore #321
  • DynamoStore/DynamoStore.Prometheus: Implements the majority of the CosmosStore functionality via FSharp.AWS.DynamoDB #321
  • EventStore: Revise test rig to target a Docker-hosted cluster #317
  • EventStoreDb: As per EventStore module, but using the modern EventStore.Client.Grpc.Streams client #196
  • MessageDb: Implements a message-db storage backend #339 with OpenTelemetry tracing and snapshotting support #348 🙏 @nordfjord
  • eqx init --indexUnfolds cosmos: enables querying uncompressed unfolds (see shouldCompress) #434
  • eqx query cosmos: Queries based on uncompressed unfolds (see eqx init -U) #434
  • eqx query -o FILEPATH cosmos: Allows capture of raw JSON to a file #444
  • eqx dump: -s flag is now optional
  • eqx stats: -A flag to request all stats (equivalent to requesting -ESD) #424

Changed

  • Change surface APIs that use Tuples and Options to struct equivalents. Some due to struct changes in FsCodec #82, and use task in hot paths #337
  • Change surface APIs that use'event list or 'event seq to 'event[] #411
  • Raise FSharp.Core req to 6.0.7, framework req to net6.0 #310 #337 #33 #411
  • Replace AsyncSeq usage with FSharp.Control.TaskSeq v 0.4.0 #361 #391
  • Equinox: Move Serilog dependency from Decider constructor to Category/Decider.forStream #337 #419
  • Equinox: FsCodec.StreamId replaces usage of FsCodec.StreamName #353 #378 #419
  • Equinox.ResolveOption: rename to LoadOption #308 #413
  • Equinox.LoadOption: Rename AllowStale to AnyCachedValue #386
  • Equinox.Decider: Replace 'event list with 'event[] #411
  • Equinox.Decider: Replace maxAttempts with a default policy and an optional argument on Transact* APIs #337
  • Equinox.Decider: rename Decider.TransactAsync, Decider.TransactExAsync to Transact #314
  • Equinox.Core.AsyncBatchingGate: renamed to Batching.Batcher #390
  • Equinox.Core.AsyncCacheCell: renamed to TaskCell #433
  • Equinox.Core: Now a free-standing library that a) does not depend on Equinox b) is not depended on by the Stores (though CosmosStore inlines TaskCell) #420
  • Stores: Change Event Body types, requiring FsCodec v 3.0.0, with EventBody types switching from byte[] to ReadOnlyMemory<byte> and/or JsonElement see FsCodec#75 #323
  • Stores: *Category.Resolve: Replace Resolve(sn, ?ResolveOption, ?requestContext) with ?load = LoadOption parameter on all Transact and Query methods, and Decider.forStream/Decider.forRequest to convey request context #308
  • Stores: *Category ctor: Add mandatory name argument, and Name property #410
  • Stores: *Category ctor: Change fold to be a Func (no changes to F# code required) #421
  • Stores: *Category ctor: Change caching to be last argument, to reflect that it is applied over the top #410
  • Stores: *Category ctor: Change caching and access to be mandatory, adding NoCaching and Unoptimized modes to represent the former defaults #417
  • CosmosStore: Require Microsoft.Azure.Cosmos v 3.35.4 #310
  • CosmosStore: Switch to natively using JsonElement event bodies #305 🙏 @ylibrach
  • CosmosStore: Switch to natively using System.Text.Json for serialization of all Microsoft.Azure.Cosmos round-trips #305 🙏 @ylibrach
  • CosmosStore: Only log bytes when log level is Debug #305
  • CosmosStore.AccessStrategy.MultiSnapshot,Custom: Change list and seq types to array #338
  • CosmosStore.CosmosStoreCategory: Generalize compressUnfolds to shouldCompress predicate #436
  • CosmosStore.CosmosStoreCategory.TryHydrateTip: Generates a Stream State Momento based on externally loaded unfold state #434
  • CosmosStore.CosmosStoreCategory.TryLoad: Renders a 'state based on an Unfold #434
  • CosmosStore.Core.Initialization.initAux: Replace hard-coded manual 400 RU with mode parameter #328 🙏 @brihadish
  • CosmosStore.CosmosClientFactory: Moved to Core #430
  • EventStore: Target EventStore.Client v 22.0.0; rename Connector -> EventStoreConnector #317
  • Tool/samples/: switched to use Equinox.EventStoreDb #196

Removed

  • Equinox.ISyncContext.CreateMemento #413
  • Stores: Removed Equinox.Core dependency; everything a store needs is either inlined privately, or lives in Equinox #420
  • Remove explicit net461 handling; minimum target now net6.0 / FSharp.Core v 6.0.0 #310 #323 #354
  • Remove Equinox.Core.ICache (there is/was only one impl, and the interface has changed as part of #386) #389
  • CosmosStore.CosmosStoreConnector: Removed bypassCertificateValidation (superseded by connection string IgnoreEndpointCertificate) #443

Fixed

  • EventStore/SqlStreamStore: rename Equinox.XXXStore.Log.Event -> Metric to match CosmosStore #311
  • SqlStreamStore: Fix Metric key to be ssEvt (was esEvt) #311

3.0.7 - 2022-05-12

Added

  • eqx dump/Equinox.Tool: Add -F option to opt out of pretty printing unfolds #319
  • eqx dump/Equinox.Tool: Show payload statistics #323
  • eqx dump/Equinox.Tool: Add -B option to prevent assuming UTF-8 bodies #323

Changed

  • eqx dump/Equinox.Tool: Flip -P option to opt in to pretty printing for events #313

Fixed

  • CosmosStore: Fixed mis-Indexing of Unfolds when >1 Unfold present #322 #324
  • eqx dump/Equinox.Tool: Use System.Text.Json for pretty printing to handle null values correctly #319

3.0.6 - 2022-01-19

Changed

  • CosmosStore: Cleanup Microsoft.Azure.Cosmos calls #303

Removed

  • Removed Grafana spec now that canonical is in dotnet-templates #304

Fixed

  • CosmosStore: Fix Loading Fallback to archive algorithm bug when all events pruned from Tip #306

3.0.5 - 2021-11-18

Added

Fixed

  • MemoryStore: Fixed incorrect Version computation for TransactEx post-State #296

3.0.4 - 2021-10-15

Fixed

  • CosmosStore: Fixed event retrieval bug for Reload for both Query with cached value and resync cases #295 🙏 @ragiano215

3.0.3 - 2021-09-16

Changed

  • EventStore: Add customize hook to Connector #286 (cherry-pick from 2.6.0)

3.0.2 - 2021-09-13

Fixed

  • Fix CI to stop emitting builds with incorrect AssemblyVersion 1.0.0.0 (updated MinVer to 2.5.0)
  • Update global.json to use SDK version 5.0.200

3.0.1 - 2021-06-11

Added

  • CosmosStore.CosmosStoreConnector: Wrapper for CosmosClientFactory enabling cleaner consumer code #292

Fixed

  • CosmosStore: Reinstate default connection mode as Direct per #281 #287

3.0.0 - 2021-05-13

Changed

  • CosmosStore.Prometheus.LogSink: Aligned signature with Equivalent Propulsion one 🙏 @deviousasti

3.0.0-beta.4 - 2021-04-28

Added

  • CosmosStore.Prometheus.LogSink: Generalized app tag to arbitrary custom tags as per Cosmos #287

3.0.0-beta.3 - 2021-04-06

Added

  • CosmosStore.CosmosStoreClient: Merge of CosmosStore.CosmosStoreConnector and CosmosStoreConnection #280
  • CosmosStore.Discovery.Endpoint: Enables parsing of Endpoint Uri from connection string #284 #280

Changed

  • CosmosStore: Add stream name to "EqxCosmos Tip" log entries

Fixed

  • Equinox.Tool: Fix incorrect Azure.Cosmos.Direct reference #280

3.0.0-beta.2 - 2021-03-12

Added

  • CosmosStore.CosmosStoreConnector: Uses the CosmosDB SDK 3.17 CreateAndInitialize to correctly connect and initialize a CosmosClient for an application #279

Changed

  • CosmosStore: Default Connection Mode now Direct to align with V3 SDK (previous default was Gateway to match V2 SDK) #281
  • CosmosStore: Target Microsoft.Azure.Cosmos v 3.17.0 #278

Fixed

  • CosmosStore: Dispose() as required by updated CosmosDB SDK FeedIterator interface #278

3.0.0-beta.1 - 2021-02-24

Added

  • Equinox.CosmosStore: Forked from Equinox.Cosmos to add significant new features (see Removed section for deprecation policy info).
    • Added support for accumulating events in Tip, i.e. being able to operate with a single document per stream until the events (if any) overflow a defined size threshold #251 see also #110
    • Added Archive store Fallback for Event loading, enabling streams to be hot-migrated (archived to a secondary/clone, then pruned from the primary/active) between Primary and Archival stores #247, #259
    • Added support for pruning events within the Tip document #258 see also #233
    • Added Prometheus integration package #266 see also #267
    • target Microsoft.Azure.Cosmos v 3.9.0 (instead of Microsoft.Azure.DocumentDB[.Core] v 2.x) #144
    • Replaced BatchingPolicy, RetryPolicy with TipOptions, QueryOptions to better align with Cosmos SDK V4 #253
    • Reorganized QueryRetryPolicy to handle IAsyncEnumerable coming in Cosmos SDK V4 #246 🙏 @ylibrach
    • Remove exceptions from 304/404 paths when reading Tip #257
    • Removed warmup call
    • Rename Equinox.Cosmos DLL and namespace to Equinox.CosmosStore #243
      • Rename Equinox.Cosmos.Store -> Equinox.CosmosStore.Core
      • Core sub-namespace
        • Rename Equinox.Cosmos.Core.Context -> Equinox.CosmosStore.Core.EventsContext
        • Change Equinox.Cosmos.Core.Connection -> Equinox.CosmosStore.Core.RetryPolicy
        • Rename Equinox.Cosmos.Core.Gateway -> Equinox.CosmosStore.Core.StoreClient
      • Rename Equinox.Cosmos.Containers -> Equinox.CosmosStore.CosmosStoreConnection
      • Rename Equinox.Cosmos.Context -> Equinox.CosmosStore.CosmosStoreContext
      • Rename Equinox.Cosmos.Resolver -> Equinox.CosmosStore.CosmosStoreCategory
      • Rename Equinox.Cosmos.Connector -> Equinox.CosmosStore.CosmosStoreClientFactory

Changed

  • Equinox: Rename type Stream to Decider #272 🙏 @thinkbeforecoding

  • Equinox.Core: Simplify AsyncCacheCell #229

  • Equinox.EventStore: target EventStore.Client v 20.6 (instead of v 5.0.x) #224

  • All Stores: FSharp.Control.AsyncSeq v 2.0.23

  • Equinox.Tool: Target FSharp.Core v 4.7.1

  • Equinox.Tool: Add <RollForward>Major</RollForward> #270

  • All Stores: Standardise naming of top level structure: <StoreName>Connection (wraps the relevant *Client for that store), Context, Category #276

    • Rename Resolver -> <StoreName>Category
    • Rename Context -> <StoreName>Context
  • Update AzDO CI/CD to use windows-latest

  • Update to 3.1.101 SDK

  • Remove module Commands convention from examples

  • Remove separated Backend project from examples (support for architecturally separating all domain logic from Equinox and Domain Service logic from Concrete Stores remains)

  • Retarget netcoreapp2.1 sample apps to netcoreapp3.1 with SystemTextJson

  • Retarget Todobackend to aspnetcore v 3.1

  • Revise semantics of Cart Sample Command handling

Removed

  • Equinox.Cosmos: for now, there is no intention to release a 3.x version; instead Equinox.CosmosStore maintains forward compatibility of the 2.x data format but moves to Microsoft.Azure.Cosmos. Version 2.x releases (which continue to depend on Microsoft.Azure.DocumentDb.Core are published from the https://github.com/jet/equinox/tree/v2 branch

Fixed

  • Equinox: change createAttemptsExhaustedException to allow any exn-derived type #275

2.6.0 - 2021-04-28

Added

  • Cosmos.Discovery.Endpoint: Extracts Uri for diagnostic purposes #284
  • Cosmos.Prometheus.LogSink: Generalized app tag to arbitrary custom tags #287

Changed

2.5.1 - 2021-03-12

Changed

  • ISyncContext.Version: documented value as being 0-based, rather than whatever a given store happens to use internally (which happens to align with the native version representation in Equinox.Cosmos) #282
  • MemoryStore / SqlStreamStore / EventStore: aligned implementations to represent Version in a store-neutral manner per the documentation change #282

Removed

Fixed

  • Cosmos / ISyncContext.Version: fixed erroneous 0 value when re-reading with caching but without snapshots in Cosmos store #282

2.5.0 - 2021-02-24

Added

  • Stream.TransactEx: extended signature, replacing TransactAsyncEx. Provides the ISyncContext both before and after the decide so pre-flight checks can be performed (as master #263) #277

Removed

  • Stream.TransactAsyncEx (as master #263) #277

Fixed

  • Cosmos.Prometheus: Correct namespace (was erroneously Equinox.CosmosStore.Prometheus) #271

2.4.0 - 2020-12-03

Added

  • Cosmos.Prometheus: Prometheus integration package as master #266 #267

Fixed

  • MemoryStore: Serialize Committed events to guarantee consumption in event Index order re #265 #269 🙏 @fnipo
  • Cosmos: Fix defaulting for compressUnfolds in C# #261

2.3.0 - 2020-11-04

Added

  • CachingStrategy.FixedTimeSpan: Support for fixed caching periods #255

Changed

  • Cosmos: Finalize Prune API to align with master #258

2.3.0-rc2 - 2020-10-02

Added

  • Cosmos: Support Serverless Account Mode in eqx init; default RU/s to 400 if unspecified #244 🙏 @OmnipotentOwl
  • Cosmos: Added ability to inhibit compression of Unfolds #249 🙏 @ylibrach

Changed

  • Cosmos: Reorganize Sync log message text, merge with Sync Conflict message #241
  • Cosmos: Converge Stored Procedure Impl with tip-isa-batch impl from V3 (minor Request Charges cost reduction) #242

2.3.0-rc1 - 2020-08-31

Added

  • Cosmos: Prune API to delete events from the head of a stream #233

Changed

  • Cosmos: Tweaked connecting log message

2.2.0 - 2020-08-04

Added

  • Add AsyncBatchingGate #228

Fixed

  • EventStore: Pin EventStore.Client to [5.0.1,6) to avoid conflicting changes in EventStore.Client v 20.06 #223

2.1.0 - 2020-05-22

Added

  • eqx dump -b, enabling overriding of Max Events per Batch
  • MemoryStore: Add Committed event to enable simulating Change Feeds in integration tests re #205 #221

Changed

  • MemoryStore: Target FsCodec v 2.0.0 #219

2.0.2 - 2020-05-10

  • Rebuilt version of 2.0.1 with new VM image in order to release complete set of nupkg files vs only releasing MsSql

2.0.1 - 2020-03-25 - unlisted due to incomplete package set

Fixed

  • SqlStreamStore.MsSql: Initial Append when stream empty on MsSql was perpetually failing #209 🙏 @Kimserey

2.0.0 - 2020-02-19

Added

  • Stream.TransactAsyncEx, exposing the Core.ISyncContext at conclusion of the sync operation, affording the ability to examine the post-state Version etc. (This paves the way for exposing SessionToken at a later point without a breaking change) #194

Changed

  • Stream.QueryEx to supply Core.ISyncContext in lieu of only exposing Version (to align with TransactAsyncEx) #194
  • Target FsCodec v 2.0.0

2.0.0-rc9 - 2020-01-31

Added

  • eqx dump perf + logging improvements
  • eqx dump -P turns off JSON pretty printing
  • Cosmos: Tip 200 now logs received n and _etag values
  • Cosmos: Unfolds now write and return t (creation DateTimeOffset.UtcNow)
  • EventStore: Add missing optional parameters for Connector: gossipTimeout and clientConnectionTimeout #186 🙏 @AndrewRublyov

Changed

  • SqlStreamStore.*: Target SqlStreamStore v 1.2.0-beta.8
  • Target FsCodec v 2.0.0-rc3
  • Target Microsoft.SourceLink.GitHub, Microsoft.NETFramework.ReferenceAssemblies v 1.0.0
  • Samples etc target Argu v 6.0.0
  • eqx dump's -J switch now turns off JSON rendering
  • eqx -C dump now renders Store .Information logs
  • Samples consistently use module Fold, (Events.ForX streamId), removed (|Stream|) #174

Removed

  • Accumulator #184
  • Target (now uses FsCodec.StreamName) #189

Fixed

  • eqx: Reinstated writing of missing commandline argument messages to console
  • Cosmos: Fix null Data handling exception when log level <= Debug

2.0.0-rc8 - 2019-11-14

Added

  • SqlStreamStore: Full support for Microsoft Sql Server, MySQL and Postgres using SqlStreamStore #168 🙏 @rajivhost
  • Cosmos: Exposed a Connector.CreateClient for interop with V2 ChangeFeedProcessor and Propulsion.Cosmos #171
  • Cosmos: Codified AccessStrategy.RollingState #178 🙏 @jgardella
  • Cosmos: Added eqx stats command to count streams/docs/events in a CosmosDb Container re #127 #176
  • MemoryStore: Supports custom Codec logic (can use FsCodec.Box.Codec as default) #173
  • eqx dump [store]: Show event data from store #177

Changed

  • Targeted Destructurama.FSharp v 1.1.1-dev-00033 dotnet-templates#36
  • Targeted FsCodec v 1.2.1
  • Cosmos: renamed Connector's maxRetryAttemptsOnThrottledRequests and maxRetryWaitTimeInSeconds to maxRetryAttemptsOnRateLimitedRequestsandmaxRetryWaitTimeOnRateLimitedRequestsand changed latter toTimeSpan` to match V3 SDK #171
  • AccessStrategy: consistent naming for Union cases and arguments; rewrote xmldoc #178 🙏 @jgardella

Removed

  • Resolver.ResolveEx #172

Fixed

  • Cosmos: fixed accidentally swapped count and bytes metrics field values

2.0.0-rc7 - 2019-10-17

Added

  • .Cosmos: ability to inhibit server certificate validation via Connector's bypassCertificateValidation option #170 🙏 @Kelvin4702
  • store-neutral ICache; centralized implementation in Equinox.Core #161 🙏 @DSilence
  • ResolveOption.AllowStale, maximizing use of OCC for Stream.Transact, enabling stale reads (in the face of multiple writers) for Stream.Query #167
  • Ability to (optionally) pass a 'req when creating a Stream, in order to be able to interop with FsCodec's CorrelationId and CausationId fields (as added in FsCodec#22) #169

Changed

  • Updated minimum Microsoft.Azure.DocumentDb[.Core] dep from 2.0.0 to 2.2.0 (required for #170)
  • Updated FsCodec to 1.0.0 to pick up final name changes #162
  • Replaced TargetId.AggregateIdEmpty with ResolveOption.AssumeEmpty #163
  • Extracted Equinox.Core module #164
  • Used Transact name consistently in Accumulator (follow-up to #97) #166
  • Changed all curried Methods to tupled
  • .EventStore now caches written values #167
  • (internal) Updated MinVer to 2.0.0

2.0.0-rc6 - 2019-09-07

Added

  • EventStore: expose Index when decoding events via IIndexedEvent #158
  • AsAt.fsx: Illustrates usage of IndexedEvent.Index and snapshots in .EventStore vs .Cosmos #159

Changed

  • Updated to FsCodec 1.0.0-rc2 to enable TryDecode to see IIndexedEvent without casting #158

2.0.0-rc5 - 2019-08-30

Changed

  • Extracted Equinox.Codec to external project FsCodec, with Json.net support in FsCodec.NewtonsoftJson #156

2.0.0-rc4 - 2019-08-26

Added

  • Equinox.Stream.QueryEx: exposes the stream's version in order to support versioned summary projections #152
  • Equinox.Cosmos.Context: added overload requiring only (Connection, databaseId, containerId), enabling Gateway and BatchingPolicy concepts to be skipped over in single-Aggregate microservices where they are less relevant #153 @jakzale

2.0.0-rc3 - 2019-08-20

Added

  • Cosmos: Add AccessStrategy.RollingUnfolds, leveraging _etag-contingent writes to allow state management without needing to write >=1 event per update #146

Changed

  • Updated README.md to refer to propulsion init and propulsion project (formerly eqx initAux and project) jet/propulsion#17
  • Equinox.Cosmos now uses Container in preference to Collection, in alignment with the Microsoft.Azure.Cosmos SDK's standardized naming, and other minor changes, see PR for details #149
  • EQUINOX_COSMOS_COLLECTION environment variable argument for eqx tool is now EQUINOX_COSMOS_CONTAINER #143
  • eqx project now uses environment variables PROPULSION_KAFKA_* instead of EQUINOX_* #143
  • renamed Equinox.DeprecatedRawName -> StreamName #150

Removed

  • eqx project - ChangeFeedProcessor and Kafka support - All projection management logic now lives in the Propulsion libraries #138
  • eqx initAux - now propulsion init (jet/propulsion#17)[jet/propulsion#17]

2.0.0-rc2 - 2019-07-01

Changed

  • eqx initAux now sets Partition Key to /id as recommended for new aux collections #142

2.0.0-rc1 - 2019-06-14

Added

  • Equinox.Codec now uses System.Buffers.ArrayPool to reduce allocations when encoding/decoding union objects using json.net #140
  • Equinox.Codec now uses RecyclableMemoryStreamManager to reduce allocations wrt MemoryStream objects when encoding union objects using json.net #139

Changed

  • TypeShape dependency in Equinox.Codec now 7.* (was 6.*)
  • Equinox.Tool now depends on Propulsion.Kafka v >= 1.0.1
  • Equinox.Cosmos.Projection is only an internal dependency of the Equinox.Tool
  • Equinox.Cosmos: Top level CosmosStore is now called Context for consistency #140
  • Equinox.EventStore: Top level GesGateway is now called Context for consistency #140
  • Builders etc. in Equinox.Cosmos, Equinox.EventStore and Equinox.MemoryStore no longer have disambiguating Cosmos, Ges and Memory prefixes #140

Removed

  • Equinox.Projection has moved to Propulsion
  • Equinox.Projection.Codec has moved to Propulsion.Kafka
  • Equinox.Cosmos.Projection is now maintained in/as Propulsion.Cosmos (it's still in the repo for now, pending resolution of PR #138 and Propulsion issue #6)

Fixed

  • EqxCosmos Sync: Conflict writing {eventTypes} message now trims to max 5 items

2.0.0-preview9 - 2019-06-01

Added

Changed

  • Targeted Jet.ConfluentKafka.FSharp v 1.0.0-rc12 in eqx tool
  • Equinox.Tool: Switched IndexingMode to Automatic=false,IndexingMode=None, remove DefaultTimeToLive from aux collections #134
  • Equinox.Cosmos.Projection: Tidy assign and init, signatures; provided mechanism to inhibit logging #137

Removed

  • Equinox.Projection logic - Projection management logic now lives in the Propulsion libraries (StreamItem is the sole remaining item in the Equinox.Projection library).

Fixed

  • Equinox.EventStore: Fixed PreferSlave bug for Discovery.Uri mode #135
  • Equinox.EventStore: Fixed PreferSlave and Random modes for gossip-based Discovery modes #135 @asetda

2.0.0-preview8 - 2019-05-16

Changed

  • Replace flat single-item Equinox.Projection.Codec.RenderedEvent with RenderedSpan to match incoming Projection enhancements #131
  • Equinox.Projection performance and interface extraction work via dotnet new eqxsync template #132

2.0.0-preview7 - 2019-05-14

Changed

2.0.0-preview6 - 2019-05-06

Added

  • Added Equinox.Projection state management: StreamState/StreamStates #128
  • Added Equinox.Projection pipeline: Progress/Scheduling/Projector/Ingestion/Ingester` #128
  • Added Equinox.Cosmos.Store.Log.Metrics.dump as a placeholder stats mechanism #126
  • Added Equinox.Projection.StreamItem as canonical representation of a raw item from a feed in Projections #125

Changed

  • [re]Introduced Equinox.Projection.Codec to house Codec-specific aspects of the shared projection presently in Equinox.Projection #125
  • ChangeFeedObserver: Made assign and revoke extensibility points in builder async #124
  • ChangeFeedObserver: Renamed ChangeFeedObserver's processBatch to ingest and documented role of IChangeFeedObserverContext.Checkpoint in more detail #124
  • Targeted Jet.ConfluentKafka.FSharp v 1.0.0-rc6 in eqx tool

2.0.0-preview5 - 2019-04-12

Added

  • exposed assign and revoke extensibility points in ChangeFeedObserver builder #119

Changed

Fixed

  • Added partitionRangeId context to ChangeFeedObserver logging #119

2.0.0-preview4 - 2019-04-03

Added

  • Added database-level RU-provisioning support (i.e., eqx init's -D switch) #120
  • Implemented ability to amend RU allocations where database/collection already exists #112

Changed

  • Targeted Jet.ConfluentKafka.FSharp v 1.0.0-rc2 in eqx tool
  • Removed special casing of Tip batches from Equinox.Cosmos.Projection in preparation for transparent integration of #110 without necessitating updating of projectors and related systems #119

2.0.0-preview3 - 2019-03-27

Fixed

  • Reading null from Equinox.Cosmos and then writing that to Kafka yielded invalid json #18

2.0.0-preview2 - 2019-03-23

Added

  • Cosmos.Projection.ChangeFeedProcessor: Support management of an aux collection in account other than the one being read from by adding auxAccountKey param #115
  • Support ETL scenarios by enabling the event creation Timestamp to be [read and] written by supplying it in Equinox.Codec.IEvent #116

Changed

  • Rename Equinox.Projection.Codec NuGet to Equinox.Projection (no code changes)
  • Renamespace and separate Equinox.Codec to Equinox.Codec.NewtonsoftJson and Equinox.Codec.Custom (in preparation for #113) HT @szer
  • Uses MinVer 1.0.0 [internally] to compute package versions (was rc.1, beta.4 along the way)

Removed

  • Remove maxEventsPerSlice/maxTipEvents pending #109

2.0.0-preview1 - 2019-03-07

Added

  • Provide capability to access Metadata and EventNumber/Index re #102

Changed

  • Make caching non-optional in CosmosStreamResolver; add NoCaching cache mode for Equinox.Cosmos #104 @jakzale
  • Reorder caching and access in GesStreamResolver to match CosmosStreamResolver #107
  • Renamespaced and separated Equinox.Codec APIs to separate Newtonsoft.Json and custom encode/tryDecode approaches #102 (in preparation for #79)

Removed

Fixed

  • Add Writing empty event list guard for Equinox.Cosmos #105
  • Disable support for non-record Event payloads in Equinox.Codec #103

1.1.0-preview2 - 2019-02-20

Added

  • Equinox.Projection.Kafka consumer metrics emission, see #94 @michaelliao5
  • Add samples/Tutorial with .fsx files (see also related docs)
  • Overloads to reduce need to use CosmosCollections @jakzale

Changed

  • Target EventStore.Client 5.* to avail of bugfixes and single client codebase. Interoperable with 4.* servers
  • Updated to "Microsoft.SourceLink.GitHub" Version="1.0.0-beta2-18618-05"
  • Replace stateful Context API as primary Handler API with Transact; Compatible Accumulator remains to facilitate porting #97 @eiriktsarpalis
  • Replace Handler with Stream
  • Replace Equinox.Cosmos.Eqx* with Cosmos* @jakzale
  • Replace Equinox.MemoryStore.Mem* with Memory*

Removed

  • Moved internal Stream helpers from Equinox to instead be inlined into Store impls #97 @eiriktsarpalis
  • De-emphasized Handler in sample aggregates @jakzale

1.1.0-preview1 - 2019-02-08

Added

  • Equinox.Cosmos projection facilities, see #87

1.0.4 - 2019-02-08

Changed

  • Rename Equinox.CatId to Equinox.AggregateId (HT @lfr for prompting the change)
  • Make Newtonsoft.Json dependency consistently >= 11.0.2
  • Make Microsoft.Azure.DocumentDB dependency consistently >= 2.0.0 (was temporarily 1.x on net461 to fit in with constraints of a downstream)
  • Refactor Equinox.Cosmos wiring to expose CosmosConnector.ConnectionPolicy
  • Use FSharp.UMX from @alfonsogarciacaro and @eiriktsarpalis in tests/samples #89 (HT @chinwobble in #83 for prompting the change)

Fixed

  • Improve CosmosDb connection string parse error message
  • change from licenseUrl to license in .nupkg
  • Make xUnit dependency consistently 2.4.0

1.0.3 - 2019-01-19

(For information pertaining to earlier releases, see release notes in https://github.com/jet/equinox/releases and/or can someone please add it!)