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).
Equinox.CosmosStore.Linq: Add LINQ querying support for Indexedunfolds #450
Equinox.Core.TaskCellDictionary: Helper to manage concurrent reads in View processing #477
Tool: CorrectedNullReferenceExceptionwhen usingStreamLikeoption
4.1.0 - 2025-06-12
Equinox.CosmosStore: RoundtripDandMencoding values as perDynamoStore, enabling more extensive control of compression #472Equinox.CosmosStore: UseMicrosoft.Azure.CosmosintegratedSystem.Text.Jsonsupport; added ability to specifyserializerOptions#467Equinox.CosmosStore: Group metrics by Container Name #449Equinox.CosmosStore: Group metrics by Category; split outTipactivity #453Equinox.CosmosStore: Support Ingesting unfolds #460Equinox.CosmosStore.EventsContext.Sync: Support syncing of unfolds #460eqx:-Qflag omits timestamps from console output logging #473eqx destroy: Support for deleting the items (documents) underlying a category/stream/arbitraryWHEREclause #473eqx top: Support for analyzing space usage for event and view containers by category and/or stream #473eqx dump,eqx query:-slSupport for specifying streams to dump via a CosmosDBLIKEexpression #473eqx dump:-Qstrips intervals, regularizes snapshots, logs stream names #473eqx stats:-O,-Nflags extract oldest and newest_tswithin a store #459eqx stats:-Uflag to count streams with unfolds and total number thereof #473eqx stats:-Iflag; relabel Documents as Items, retaining existing-Dflag #473
Equinox.*Store,Equinox.*Store.Prometheus: PinEquinoxdependencies to[4.0.3, 5.0.0)] #448Equinox.CosmosStore: UpdateSystem.Text.Jsondep to6.0.10per CVE-2024-43485 #470Equinox.CosmosStore: MinimumMicrosoft.Azure.Cosmosrequirement updated to3.43.1to avail of integratedSystem.Text.Jsonsupport #467Equinox.CosmosStore.CosmosStoreConnector: Removed mandatoryrequestTimeoutargument #467Equinox.DynamoStore: Up minFSharp.AWS.DynamoDBto v0.12.3-betato handle breaking change #474Equinox.MessageDb: Up minNpgsqlto v7.0.7as7.0.0is on CVE blacklistEquinox.MemoryStore: Remove unused TrySync args #466
eqx stats:-A(all stats) is now the default unless you specify >=1 of the individual stats viaESDNOflags #459Equinox.CosmosStore.CosmosStoreCategory: RemovedshouldCompressmechanism as compression is now external #472
4.0.4 - 2024-05-08
Equinox.Core.Batcher: Add SettableLinger#454
4.0.3 - 2024-04-11
Equinox:LoadOption.AnyCachedValue,LoadOption.AllowStaleprevent yielding of superseded value where overlapping call in flight #452Equinox:LoadOption.AnyCachedValue,LoadOption.AllowStaleprevent incorrectTaskCanceledExceptionoutcome where overlapping call cancelled #452Equinox:LoadOption.AnyCachedValue,LoadOption.AllowStalecorrect to ensure optimal loading where first flight was in progress #452
4.0.2 - 2024-04-08
Equinox:LoadOption.AnyCachedValue,LoadOption.AllowStalecaches and continually yieldsTaskCanceledExceptionwhere request cancelled #451
4.0.0 - 2024-03-20
Equinox:Decider.Transact,TransactExoverloads #325Equinox.LoadOption.RequireLeader: support for requesting a consistent read of a stream #341Equinox.LoadOption.AllowStale: Read mode that limits reads to a maximum of one retrieval per the defined time window #386Equinox.Categorybase class, withDeciderandStreamhelpermodules #337Equinox.DeciderCore: C# friendly equivalent ofDecider(i.e.FuncandTask) #338Equinox.ISyncContext.StreamEventBytes: Exposes stored size of events in the stream (initial impl provides it forDynamoStoreonly) #326Equinox.Core.Batching:BatcherDictionary,BatcherCacheto host concurrentBatchers#390Equinox.Core.Batching: Addlimiter: SemaphoreSlimargument to extend linger phase #427CosmosStore.CosmosStoreConnector:Connect,ConnectAsync#421CosmosStore.Exceptions: Active patterns to simplify classification in the context of Propulsion handlers #416CosmosStore.Prometheus: Addruttag to enable filtering/grouping by Read vs Write activity as perDynamoStore#321DynamoStore/DynamoStore.Prometheus: Implements the majority of theCosmosStorefunctionality viaFSharp.AWS.DynamoDB#321EventStore: Revise test rig to target a Docker-hosted cluster #317EventStoreDb: As perEventStoremodule, but using the modernEventStore.Client.Grpc.Streamsclient #196MessageDb: Implements a message-db storage backend #339 with OpenTelemetry tracing and snapshotting support #348 🙏 @nordfjordeqx init --indexUnfolds cosmos: enables querying uncompressed unfolds (seeshouldCompress) #434eqx query cosmos: Queries based on uncompressed unfolds (seeeqx init -U) #434eqx query -o FILEPATH cosmos: Allows capture of raw JSON to a file #444eqx dump:-sflag is now optionaleqx stats:-Aflag to request all stats (equivalent to requesting-ESD) #424
- Change surface APIs that use Tuples and Options to
structequivalents. Some due tostructchanges inFsCodec#82, and usetaskin hot paths #337 - Change surface APIs that use
'event listor'event seqto'event[]#411 - Raise
FSharp.Corereq to6.0.7, framework req tonet6.0#310 #337 #33 #411 - Replace
AsyncSequsage withFSharp.Control.TaskSeqv0.4.0#361 #391 Equinox: MoveSerilogdependency fromDeciderconstructor toCategory/Decider.forStream#337 #419Equinox:FsCodec.StreamIdreplaces usage ofFsCodec.StreamName#353 #378 #419Equinox.ResolveOption: rename toLoadOption#308 #413Equinox.LoadOption: RenameAllowStaletoAnyCachedValue#386Equinox.Decider: Replace'event listwith'event[]#411Equinox.Decider: ReplacemaxAttemptswith a default policy and an optional argument onTransact*APIs #337Equinox.Decider: renameDecider.TransactAsync,Decider.TransactExAsynctoTransact#314Equinox.Core.AsyncBatchingGate: renamed toBatching.Batcher#390Equinox.Core.AsyncCacheCell: renamed toTaskCell#433Equinox.Core: Now a free-standing library that a) does not depend onEquinoxb) is not depended on by the Stores (thoughCosmosStoreinlinesTaskCell) #420- Stores: Change Event Body types, requiring
FsCodecv3.0.0, withEventBodytypes switching frombyte[]toReadOnlyMemory<byte>and/orJsonElementsee FsCodec#75 #323 - Stores:
*Category.Resolve: ReplaceResolve(sn, ?ResolveOption, ?requestContext)with?load = LoadOptionparameter on allTransactandQuerymethods, andDecider.forStream/Decider.forRequestto convey request context #308 - Stores:
*Categoryctor: Add mandatorynameargument, andNameproperty #410 - Stores:
*Categoryctor: Changefoldto be aFunc(no changes to F# code required) #421 - Stores:
*Categoryctor: Changecachingto be last argument, to reflect that it is applied over the top #410 - Stores:
*Categoryctor: Changecachingandaccessto be mandatory, addingNoCachingandUnoptimizedmodes to represent the former defaults #417 CosmosStore: RequireMicrosoft.Azure.Cosmosv3.35.4#310CosmosStore: Switch to natively usingJsonElementevent bodies #305 🙏 @ylibrachCosmosStore: Switch to natively usingSystem.Text.Jsonfor serialization of allMicrosoft.Azure.Cosmosround-trips #305 🙏 @ylibrachCosmosStore: Only logbyteswhen log level isDebug#305CosmosStore.AccessStrategy.MultiSnapshot,Custom: Changelistandseqtypes toarray#338CosmosStore.CosmosStoreCategory: GeneralizecompressUnfoldstoshouldCompresspredicate #436CosmosStore.CosmosStoreCategory.TryHydrateTip: Generates a Stream State Memento based on externally loadedunfold state #434CosmosStore.CosmosStoreCategory.TryLoad: Renders a'statebased on an Unfold #434CosmosStore.Core.Initialization.initAux: Replace hard-coded manual 400 RU withmodeparameter #328 🙏 @brihadishCosmosStore.CosmosClientFactory: Moved to Core #430EventStore: TargetEventStore.Clientv22.0.0; renameConnector->EventStoreConnector#317Tool/samples/: switched to useEquinox.EventStoreDb#196
Equinox.ISyncContext.CreateMemento#413- Stores: Removed
Equinox.Coredependency; everything a store needs is either inlined privately, or lives inEquinox#420 - Remove explicit
net461handling; minimum target nownet6.0/FSharp.Corev6.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: RemovedbypassCertificateValidation(superseded by connection stringIgnoreEndpointCertificate) #443
EventStore/SqlStreamStore: renameEquinox.XXXStore.Log.Event->Metricto matchCosmosStore#311SqlStreamStore: FixMetrickey to bessEvt(wasesEvt) #311
3.0.7 - 2022-05-12
eqx dump/Equinox.Tool: Add-Foption to opt out of pretty printing unfolds #319eqx dump/Equinox.Tool: Show payload statistics #323eqx dump/Equinox.Tool: Add-Boption to prevent assuming UTF-8 bodies #323
eqx dump/Equinox.Tool: Flip-Poption to opt in to pretty printing for events #313
CosmosStore: Fixed mis-Indexing of Unfolds when >1 Unfold present #322 #324eqx dump/Equinox.Tool: UseSystem.Text.Jsonfor pretty printing to handlenullvalues correctly #319
3.0.6 - 2022-01-19
CosmosStore: CleanupMicrosoft.Azure.Cosmoscalls #303
- Removed Grafana spec now that canonical is in
dotnet-templates#304
CosmosStore: Fix Loading Fallback to archive algorithm bug when all events pruned from Tip #306
3.0.5 - 2021-11-18
- Stores: Expose
.Log.PropertyTagLiterals to enable log filtering #298 Equinox.Tool: Add support for autoscaling throughput of Cosmos containers and databases #302 🙏 @belcher-rok
MemoryStore: Fixed incorrectVersioncomputation forTransactExpost-State #296
3.0.4 - 2021-10-15
CosmosStore: Fixed event retrieval bug forReloadfor bothQuerywith cached value and resync cases #295 🙏 @ragiano215
3.0.3 - 2021-09-16
EventStore: Addcustomizehook toConnector#286 (cherry-pick from2.6.0)
3.0.2 - 2021-09-13
- Fix CI to stop emitting builds with incorrect
AssemblyVersion 1.0.0.0(updated MinVer to2.5.0) - Update global.json to use SDK version
5.0.200
3.0.1 - 2021-06-11
CosmosStore.CosmosStoreConnector: Wrapper forCosmosClientFactoryenabling cleaner consumer code #292
3.0.0 - 2021-05-13
CosmosStore.Prometheus.LogSink: Aligned signature with Equivalent Propulsion one 🙏 @deviousasti
3.0.0-beta.4 - 2021-04-28
CosmosStore.Prometheus.LogSink: Generalizedapptag to arbitrary custom tags as perCosmos#287
3.0.0-beta.3 - 2021-04-06
CosmosStore.CosmosStoreClient: Merge ofCosmosStore.CosmosStoreConnectorandCosmosStoreConnection#280CosmosStore.Discovery.Endpoint: Enables parsing of Endpoint Uri from connection string #284 #280
CosmosStore: Add stream name to "EqxCosmos Tip" log entries
Equinox.Tool: Fix incorrectAzure.Cosmos.Directreference #280
3.0.0-beta.2 - 2021-03-12
CosmosStore.CosmosStoreConnector: Uses the CosmosDB SDK 3.17CreateAndInitializeto correctly connect and initialize a CosmosClient for an application #279
CosmosStore: Default Connection Mode nowDirectto align with V3 SDK (previous default wasGatewayto match V2 SDK) #281CosmosStore: TargetMicrosoft.Azure.Cosmosv3.17.0#278
CosmosStore:Dispose()as required by updated CosmosDB SDKFeedIteratorinterface #278
3.0.0-beta.1 - 2021-02-24
Equinox.CosmosStore: Forked fromEquinox.Cosmosto 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.Cosmosv3.9.0(instead ofMicrosoft.Azure.DocumentDB[.Core] v 2.x) #144 - Replaced
BatchingPolicy,RetryPolicywithTipOptions,QueryOptionsto better align with Cosmos SDK V4 #253 - Reorganized
QueryRetryPolicyto handleIAsyncEnumerablecoming in Cosmos SDK V4 #246 🙏 @ylibrach - Remove exceptions from 304/404 paths when reading Tip #257
- Removed warmup call
- Rename
Equinox.CosmosDLL and namespace toEquinox.CosmosStore#243- Rename
Equinox.Cosmos.Store->Equinox.CosmosStore.Core Coresub-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
- 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
- Rename
-
Equinox: Renametype StreamtoDecider#272 🙏 @thinkbeforecoding -
Equinox.Core: SimplifyAsyncCacheCell#229 -
Equinox.EventStore: targetEventStore.Clientv20.6(instead of v5.0.x) #224 -
All Stores:
FSharp.Control.AsyncSeqv2.0.23 -
Equinox.Tool: TargetFSharp.Corev4.7.1 -
Equinox.Tool: Add<RollForward>Major</RollForward>#270 -
All Stores: Standardise naming of top level structure:
<StoreName>Connection(wraps the relevant*Clientfor that store),Context,Category#276- Rename
Resolver-><StoreName>Category - Rename
Context-><StoreName>Context
- Rename
-
Update AzDO CI/CD to use
windows-latest -
Update to
3.1.101SDK -
Remove
module Commandsconvention from examples -
Remove separated
Backendproject from examples (support for architecturally separating all domain logic from Equinox and Domain Service logic from Concrete Stores remains) -
Retarget
netcoreapp2.1sample apps tonetcoreapp3.1withSystemTextJson -
Retarget Todobackend to
aspnetcorev3.1 -
Revise semantics of Cart Sample Command handling
Equinox.Cosmos: for now, there is no intention to release a3.xversion; insteadEquinox.CosmosStoremaintains forward compatibility of the2.xdata format but moves toMicrosoft.Azure.Cosmos. Version2.xreleases (which continue to depend onMicrosoft.Azure.DocumentDb.Coreare published from the https://github.com/jet/equinox/tree/v2 branch
Equinox: changecreateAttemptsExhaustedExceptionto allow anyexn-derivedtype#275
2.6.0 - 2021-04-28
Cosmos.Discovery.Endpoint: Extracts Uri for diagnostic purposes #284Cosmos.Prometheus.LogSink: Generalizedapptag to arbitrary custom tags #287
EventStore: Addcustomizehook toConnector#286EventStore: PinEventStore.Clientto[5.0.11,6)#286EventStore: AddedSetAutoCompatibilityMode("auto")to default wireup #286
2.5.1 - 2021-03-12
ISyncContext.Version: documented value as being0-based, rather than whatever a given store happens to use internally (which happens to align with the native version representation inEquinox.Cosmos) #282MemoryStore/SqlStreamStore/EventStore: aligned implementations to representVersionin a store-neutral manner per the documentation change #282
Cosmos/ISyncContext.Version: fixed erroneous0value when re-reading with caching but without snapshots inCosmosstore #282
2.5.0 - 2021-02-24
Stream.TransactEx: extended signature, replacingTransactAsyncEx. Provides theISyncContextboth before and after thedecideso pre-flight checks can be performed (asmaster#263) #277
Cosmos.Prometheus: Correct namespace (was erroneouslyEquinox.CosmosStore.Prometheus) #271
2.4.0 - 2020-12-03
MemoryStore: SerializeCommittedevents to guarantee consumption in eventIndexorder re #265 #269 🙏 @fnipoCosmos: Fix defaulting forcompressUnfoldsin C# #261
2.3.0 - 2020-11-04
CachingStrategy.FixedTimeSpan: Support for fixed caching periods #255
Cosmos: FinalizePruneAPI to align withmaster#258
2.3.0-rc2 - 2020-10-02
Cosmos: Support Serverless Account Mode ineqx init; default RU/s to 400 if unspecified #244 🙏 @OmnipotentOwlCosmos: Added ability to inhibit compression of Unfolds #249 🙏 @ylibrach
Cosmos: Reorganize Sync log message text, merge with Sync Conflict message #241Cosmos: Converge Stored Procedure Impl withtip-isa-batchimpl from V3 (minor Request Charges cost reduction) #242
2.3.0-rc1 - 2020-08-31
Cosmos:PruneAPI to delete events from the head of a stream #233
Cosmos: Tweaked connecting log message
2.2.0 - 2020-08-04
- Add
AsyncBatchingGate#228
EventStore: PinEventStore.Clientto[5.0.1,6)to avoid conflicting changes inEventStore.Clientv20.06#223
2.1.0 - 2020-05-22
eqx dump -b, enabling overriding of Max Events per BatchMemoryStore: AddCommittedevent to enable simulating Change Feeds in integration tests re #205 #221
MemoryStore: TargetFsCodecv2.0.0#219
2.0.2 - 2020-05-10
- Rebuilt version of
2.0.1with 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
SqlStreamStore.MsSql: Initial Append when stream empty on MsSql was perpetually failing #209 🙏 @Kimserey
2.0.0 - 2020-02-19
Stream.TransactAsyncEx, exposing theCore.ISyncContextat conclusion of the sync operation, affording the ability to examine the post-stateVersionetc. (This paves the way for exposingSessionTokenat a later point without a breaking change) #194
Stream.QueryExto supplyCore.ISyncContextin lieu of only exposingVersion(to align withTransactAsyncEx) #194- Target
FsCodecv2.0.0
2.0.0-rc9 - 2020-01-31
eqx dumpperf + logging improvementseqx dump -Pturns off JSON pretty printingCosmos:Tip 200now logs receivednand_etagvaluesCosmos: Unfolds now write and returnt(creationDateTimeOffset.UtcNow)EventStore: Add missing optional parameters forConnector:gossipTimeoutandclientConnectionTimeout#186 🙏 @AndrewRublyov
SqlStreamStore.*: TargetSqlStreamStorev1.2.0-beta.8- Target
FsCodecv2.0.0-rc3 - Target
Microsoft.SourceLink.GitHub,Microsoft.NETFramework.ReferenceAssembliesv1.0.0 - Samples etc target
Arguv6.0.0 eqx dump's-Jswitch now turns off JSON renderingeqx -C dumpnow renders Store.Informationlogs- Samples consistently use
module Fold,(Events.ForX streamId), removed(|Stream|)#174
eqx: Reinstated writing of missing commandline argument messages to consoleCosmos: FixnullData handling exception when log level <=Debug
2.0.0-rc8 - 2019-11-14
SqlStreamStore: Full support for Microsoft Sql Server, MySQL and Postgres using SqlStreamStore #168 🙏 @rajivhostCosmos: Exposed aConnector.CreateClientfor interop with V2 ChangeFeedProcessor andPropulsion.Cosmos#171Cosmos: CodifiedAccessStrategy.RollingState#178 🙏 @jgardellaCosmos: Addedeqx statscommand to count streams/docs/events in a CosmosDb Container re #127 #176MemoryStore: Supports custom Codec logic (can useFsCodec.Box.Codecas default) #173eqx dump [store]: Show event data from store #177
- Targeted
Destructurama.FSharpv1.1.1-dev-00033dotnet-templates#36 - Targeted
FsCodecv1.2.1 Cosmos: renamedConnector'smaxRetryAttemptsOnThrottledRequestsandmaxRetryWaitTimeInSecondsto maxRetryAttemptsOnRateLimitedRequestsandmaxRetryWaitTimeOnRateLimitedRequestsand changed latter toTimeSpan` to match V3 SDK #171AccessStrategy: consistent naming for Union cases and arguments; rewrote xmldoc #178 🙏 @jgardella
Resolver.ResolveEx#172
Cosmos: fixed accidentally swappedcountandbytesmetrics field values
2.0.0-rc7 - 2019-10-17
.Cosmos: ability to inhibit server certificate validation viaConnector'sbypassCertificateValidationoption #170 🙏 @Kelvin4702- store-neutral
ICache; centralized implementation inEquinox.Core#161 🙏 @DSilence ResolveOption.AllowStale, maximizing use of OCC forStream.Transact, enabling stale reads (in the face of multiple writers) forStream.Query#167- Ability to (optionally) pass a
'reqwhen creating aStream, in order to be able to interop with FsCodec'sCorrelationIdandCausationIdfields (as added in FsCodec#22) #169
- Updated minimum
Microsoft.Azure.DocumentDb[.Core]dep from2.0.0to2.2.0(required for #170) - Updated
FsCodecto1.0.0to pick up final name changes #162 - Replaced
TargetId.AggregateIdEmptywithResolveOption.AssumeEmpty#163 - Extracted
Equinox.Coremodule #164 - Used
Transactname consistently inAccumulator(follow-up to #97) #166 - Changed all curried Methods to tupled
.EventStorenow caches written values #167- (internal) Updated
MinVerto2.0.0
2.0.0-rc6 - 2019-09-07
- EventStore: expose
Indexwhen decoding events viaIIndexedEvent#158 AsAt.fsx: Illustrates usage ofIndexedEvent.Indexand snapshots in.EventStorevs.Cosmos#159
- Updated to
FsCodec 1.0.0-rc2to enableTryDecodeto seeIIndexedEventwithout casting #158
2.0.0-rc5 - 2019-08-30
- Extracted
Equinox.Codecto external projectFsCodec, with Json.net support inFsCodec.NewtonsoftJson#156
2.0.0-rc4 - 2019-08-26
Equinox.Stream.QueryEx: exposes the stream's version in order to support versioned summary projections #152Equinox.Cosmos.Context: added overload requiring only (Connection, databaseId, containerId), enablingGatewayandBatchingPolicyconcepts to be skipped over in single-Aggregate microservices where they are less relevant #153 @jakzale
2.0.0-rc3 - 2019-08-20
Cosmos: AddAccessStrategy.RollingUnfolds, leveraging_etag-contingent writes to allow state management without needing to write >=1 event per update #146
- Updated README.md to refer to
propulsion initandpropulsion project(formerlyeqxinitAuxandproject) jet/propulsion#17 Equinox.Cosmosnow usesContainerin preference toCollection, in alignment with theMicrosoft.Azure.CosmosSDK's standardized naming, and other minor changes, see PR for details #149EQUINOX_COSMOS_COLLECTIONenvironment variable argument foreqxtool is nowEQUINOX_COSMOS_CONTAINER#143eqx projectnow uses environment variablesPROPULSION_KAFKA_*instead ofEQUINOX_*#143- renamed
Equinox.DeprecatedRawName->StreamName#150
eqx project-ChangeFeedProcessorand Kafka support - All projection management logic now lives in thePropulsionlibraries #138eqx initAux- nowpropulsion init(jet/propulsion#17)[jet/propulsion#17]
2.0.0-rc2 - 2019-07-01
eqx initAuxnow sets Partition Key to/idas recommended for newauxcollections #142
2.0.0-rc1 - 2019-06-14
Equinox.Codecnow usesSystem.Buffers.ArrayPoolto reduce allocations when encoding/decoding union objects using json.net #140Equinox.Codecnow usesRecyclableMemoryStreamManagerto reduce allocations wrtMemoryStreamobjects when encoding union objects using json.net #139
TypeShapedependency inEquinox.Codecnow7.*(was6.*)Equinox.Toolnow depends onPropulsion.Kafkav>= 1.0.1Equinox.Cosmos.Projectionis only an internal dependency of theEquinox.ToolEquinox.Cosmos: Top levelCosmosStoreis now calledContextfor consistency #140Equinox.EventStore: Top levelGesGatewayis now calledContextfor consistency #140- Builders etc. in
Equinox.Cosmos,Equinox.EventStoreandEquinox.MemoryStoreno longer have disambiguatingCosmos,GesandMemoryprefixes #140
Equinox.Projectionhas moved toPropulsionEquinox.Projection.Codechas moved toPropulsion.KafkaEquinox.Cosmos.Projectionis now maintained in/asPropulsion.Cosmos(it's still in the repo for now, pending resolution of PR #138 andPropulsionissue #6)
EqxCosmos Sync: Conflict writing {eventTypes}message now trims to max 5 items
2.0.0-preview9 - 2019-06-01
Equinox.EventStore.GesGateway.SyncAPI including addingactualVersiontoConflictUnknownResult DU case fordotnet new eqxsynctemplateEventStoreSinkimpl #133Equinox.EventStoreStatsfor consistency with CosmosDb equivalent #133
- Targeted
Jet.ConfluentKafka.FSharpv1.0.0-rc12ineqxtool Equinox.Tool: SwitchedIndexingModetoAutomatic=false,IndexingMode=None, removeDefaultTimeToLivefromauxcollections #134Equinox.Cosmos.Projection: Tidyassignandinit, signatures; provided mechanism to inhibit logging #137
Equinox.Projectionlogic - Projection management logic now lives in thePropulsionlibraries (StreamItemis the sole remaining item in theEquinox.Projectionlibrary).
Equinox.EventStore: FixedPreferSlavebug forDiscovery.Urimode #135Equinox.EventStore: FixedPreferSlaveandRandommodes for gossip-basedDiscoverymodes #135 @asetda
2.0.0-preview8 - 2019-05-16
- Replace flat single-item
Equinox.Projection.Codec.RenderedEventwithRenderedSpanto match incoming Projection enhancements #131 Equinox.Projectionperformance and interface extraction work viadotnet new eqxsynctemplate #132
2.0.0-preview7 - 2019-05-14
Equinox.Projectionperformance work based ondotnet new eqxsynctemplate #130- Reorganized
Equinox.Projectionto be a single-file concern #129
2.0.0-preview6 - 2019-05-06
- Added
Equinox.Projectionstate management:StreamState/StreamStates#128 - Added
Equinox.Projectionpipeline:Progress/Scheduling/Projector/Ingestion/Ingester` #128 - Added
Equinox.Cosmos.Store.Log.Metrics.dumpas a placeholder stats mechanism #126 - Added
Equinox.Projection.StreamItemas canonical representation of a raw item from a feed in Projections #125
- [re]Introduced
Equinox.Projection.Codecto house Codec-specific aspects of the shared projection presently inEquinox.Projection#125 ChangeFeedObserver: Madeassignandrevokeextensibility points in builderasync#124ChangeFeedObserver: RenamedChangeFeedObserver'sprocessBatchtoingestand documented role ofIChangeFeedObserverContext.Checkpointin more detail #124- Targeted
Jet.ConfluentKafka.FSharpv1.0.0-rc6ineqxtool
2.0.0-preview5 - 2019-04-12
- exposed
assignandrevokeextensibility points inChangeFeedObserverbuilder #119
- switched ChangeFeedProcessor checkpointing to be explicit (was automatic) based on requirements of
equinox-synctemplate PR #19 #119
- Added
partitionRangeIdcontext toChangeFeedObserverlogging #119
2.0.0-preview4 - 2019-04-03
- Added database-level RU-provisioning support (i.e.,
eqx init's-Dswitch) #120 - Implemented ability to amend RU allocations where database/collection already exists #112
- Targeted
Jet.ConfluentKafka.FSharpv1.0.0-rc2ineqxtool - Removed special casing of
Tipbatches fromEquinox.Cosmos.Projectionin preparation for transparent integration of #110 without necessitating updating of projectors and related systems #119
2.0.0-preview3 - 2019-03-27
- Reading
nullfrom Equinox.Cosmos and then writing that to Kafka yielded invalid json #18
2.0.0-preview2 - 2019-03-23
Cosmos.Projection.ChangeFeedProcessor: Support management of anauxcollection in account other than the one being read from by addingauxAccountKeyparam #115- Support ETL scenarios by enabling the event creation
Timestampto be [read and] written by supplying it inEquinox.Codec.IEvent#116
- Rename
Equinox.Projection.CodecNuGet toEquinox.Projection(no code changes) - Renamespace and separate
Equinox.CodectoEquinox.Codec.NewtonsoftJsonandEquinox.Codec.Custom(in preparation for #113) HT @szer - Uses MinVer 1.0.0 [internally] to compute package versions (was
rc.1,beta.4along the way)
- Remove
maxEventsPerSlice/maxTipEventspending #109
2.0.0-preview1 - 2019-03-07
- Provide capability to access
MetadataandEventNumber/Indexre #102
- Make
cachingnon-optional inCosmosStreamResolver; addNoCachingcache mode forEquinox.Cosmos#104 @jakzale - Reorder
cachingandaccessinGesStreamResolverto matchCosmosStreamResolver#107 - Renamespaced and separated
Equinox.CodecAPIs to separateNewtonsoft.Jsonand customencode/tryDecodeapproaches #102 (in preparation for #79)
- Extract
Equinox.Projection.Kafkaand its integration tests to becomeJet.ConfluentKafka.FSharpv1.0.0-preview1; retargetedEquinox.Toolto use same.
- 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
Equinox.Projection.Kafkaconsumer metrics emission, see #94 @michaelliao5- Add
samples/Tutorialwith.fsxfiles (see also related docs) - Overloads to reduce need to use
CosmosCollections@jakzale
- Target
EventStore.Client 5.*to avail of bugfixes and single client codebase. Interoperable with4.*servers - Updated to
"Microsoft.SourceLink.GitHub" Version="1.0.0-beta2-18618-05" - Replace stateful
ContextAPI as primary Handler API withTransact; CompatibleAccumulatorremains to facilitate porting #97 @eiriktsarpalis - Replace
HandlerwithStream - Replace
Equinox.Cosmos.Eqx*withCosmos*@jakzale - Replace
Equinox.MemoryStore.Mem*withMemory*
- Moved internal
Streamhelpers fromEquinoxto instead be inlined into Store impls #97 @eiriktsarpalis - De-emphasized
Handlerin sample aggregates @jakzale
1.1.0-preview1 - 2019-02-08
Equinox.Cosmosprojection facilities, see #87
1.0.4 - 2019-02-08
- Rename
Equinox.CatIdtoEquinox.AggregateId(HT @lfr for prompting the change) - Make
Newtonsoft.Jsondependency consistently>= 11.0.2 - Make
Microsoft.Azure.DocumentDBdependency consistently>= 2.0.0(was temporarily 1.x onnet461to fit in with constraints of a downstream) - Refactor
Equinox.Cosmoswiring to exposeCosmosConnector.ConnectionPolicy - Use
FSharp.UMXfrom @alfonsogarciacaro and @eiriktsarpalis in tests/samples #89 (HT @chinwobble in #83 for prompting the change)
- Improve CosmosDb connection string parse error message
- change from
licenseUrltolicensein.nupkg - Make
xUnitdependency consistently2.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!)