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).
eqx dump
perf + logging improvementseqx dump -P
turns off JSON pretty printingCosmos
:Tip 200
now logs receivedn
and_etag
values
- Update to
Microsoft.SourceLink.GitHub
v1.0.0
- Samples etc target
Argu
v6.0.0
eqx dump
's-J
switch now turns off JSON renderingeqx -vc dump
now renders Store.Information
logs
eqx
: Reinstated writing of missing commandline argument messages to consoleCosmos
: Fixnull
Data 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.CreateClient
for interop with V2 ChangeFeedProcessor andPropulsion.Cosmos
#171Cosmos
: CodifiedAccessStrategy.RollingState
#178 🙏 @jgardellaCosmos
: Addedeqx stats
command to count streams/docs/events in a CosmosDb Container re #127 #176MemoryStore
: Supports custom Codec logic (can useFsCodec.Box.Codec
as default) #173eqx dump [store]
: Show event data from store #177
- Targeted
Destructurama.FSharp
v1.1.1-dev-00033
dotnet-templates#36 - Targeted
FsCodec
v1.2.1
Cosmos
: renamedConnector
'smaxRetryAttemptsOnThrottledRequests
andmaxRetryWaitTimeInSeconds
to maxRetryAttemptsOnRateLimitedRequestsand
maxRetryWaitTimeOnRateLimitedRequestsand changed latter to
TimeSpan` to match V3 SDK #171AccessStrategy
: consistent naming for Union cases and arguments; rewrote xmldoc #178 🙏 @jgardella
Resolver.ResolveEx
#172
Cosmos
: fixed accidentally swappedcount
andbytes
metrics field values
2.0.0-rc7 - 2019-10-17
.Cosmos
: ability to inhibit server certificate validation viaConnector
'sbypassCertificateValidation
option #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
'Context
when creating aStream
, in order to be able to interop with FsCodec'sCorrelationId
andCausationId
fields (as added in FsCodec#22) #169
- Updated minimum
Microsoft.Azure.DocumentDb[.Core]
dep from2.0.0
to2.2.0
(required for #170) - Updated
FsCodec
to1.0.0
to pick up final name changes #162 - Replaced
TargetId.AggregateIdEmpty
withResolveOption.AssumeEmpty
#163 - Extracted
Equinox.Core
module #164 - Used
Transact
name consistently inAccumulator
(follow-up to #97) #166 - Changed all curried Methods to tupled
.EventStore
now caches written values #167- (internal) Updated
MinVer
to2.0.0
2.0.0-rc6 - 2019-09-07
- EventStore: expose
Index
when decoding events viaIIndexedEvent
#158 AsAt.fsx
: Illustrates usage ofIndexedEvent.Index
and snapshots in.EventStore
vs.Cosmos
#159
- Updated to
FsCodec 1.0.0-rc2
to enableTryDecode
to seeIIndexedEvent
without casting #158
2.0.0-rc5 - 2019-08-30
- Extracted
Equinox.Codec
to 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), enablingGateway
andBatchingPolicy
concepts 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 init
andpropulsion project
(formerlyeqx
initAux
andproject
) jet/propulsion#17 Equinox.Cosmos
now usesContainer
in preference toCollection
, in alignment with theMicrosoft.Azure.Cosmos
SDK's standardized naming, and other minor changes, see PR for details #149EQUINOX_COSMOS_COLLECTION
environment variable argument foreqx
tool is nowEQUINOX_COSMOS_CONTAINER
#143eqx project
now uses environment variablesPROPULSION_KAFKA_*
instead ofEQUINOX_*
#143- renamed
Equinox.DeprecatedRawName
->StreamName
#150
eqx project
-ChangeFeedProcessor
and Kafka support - All projection management logic now lives in thePropulsion
libraries #138eqx initAux
- nowpropulsion init
(jet/propulsion#17)[jet/propulsion#17]
2.0.0-rc2 - 2019-07-01
eqx initAux
now sets Partition Key to/id
as recommended for newaux
collections #142
2.0.0-rc1 - 2019-06-14
Equinox.Codec
now usesSystem.Buffers.ArrayPool
to reduce allocations when encoding/decoding union objects using json.net #140Equinox.Codec
now usesRecyclableMemoryStreamManager
to reduce allocations wrtMemoryStream
objects when encoding union objects using json.net #139
TypeShape
dependency inEquinox.Codec
now7.*
(was6.*
)Equinox.Tool
now depends onPropulsion.Kafka
v>= 1.0.1
Equinox.Cosmos.Projection
is only an internal dependency of theEquinox.Tool
Equinox.Cosmos
: Top levelCosmosStore
is now calledContext
for consistency #140Equinox.EventStore
: Top levelGesGateway
is now calledContext
for consistency #140- Builders etc. in
Equinox.Cosmos
,Equinox.EventStore
andEquinox.MemoryStore
no longer have disambiguatingCosmos
,Ges
andMemory
prefixes #140
Equinox.Projection
has moved toPropulsion
Equinox.Projection.Codec
has moved toPropulsion.Kafka
Equinox.Cosmos.Projection
is now maintained in/asPropulsion.Cosmos
(it's still in the repo for now, pending resolution of PR #138 andPropulsion
issue #6)
EqxCosmos Sync: Conflict writing {eventTypes}
message now trims to max 5 items
2.0.0-preview9 - 2019-06-01
Equinox.EventStore.GesGateway.Sync
API including addingactualVersion
toConflictUnknown
Result DU case fordotnet new eqxsync
templateEventStoreSink
impl #133Equinox.EventStore
Stats
for consistency with CosmosDb equivalent #133
- Targeted
Jet.ConfluentKafka.FSharp
v1.0.0-rc12
ineqx
tool Equinox.Tool
: SwitchedIndexingMode
toAutomatic=false,IndexingMode=None
, removeDefaultTimeToLive
fromaux
collections #134Equinox.Cosmos.Projection
: Tidyassign
andinit
, signatures; provided mechanism to inhibit logging #137
Equinox.Projection
logic - Projection management logic now lives in thePropulsion
libraries (StreamItem
is the sole remaining item in theEquinox.Projection
library).
Equinox.EventStore
: FixedPreferSlave
bug forDiscovery.Uri
mode #135Equinox.EventStore
: FixedPreferSlave
andRandom
modes for gossip-basedDiscovery
modes #135 @asetda
2.0.0-preview8 - 2019-05-16
- Replace flat single-item
Equinox.Projection.Codec.RenderedEvent
withRenderedSpan
to match incoming Projection enhancements #131 Equinox.Projection
performance and interface extraction work viadotnet new eqxsync
template #132
2.0.0-preview7 - 2019-05-14
Equinox.Projection
performance work based ondotnet new eqxsync
template #130- Reorganized
Equinox.Projection
to be a single-file concern #129
2.0.0-preview6 - 2019-05-06
- 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
- [re]Introduced
Equinox.Projection.Codec
to house Codec-specific aspects of the shared projection presently inEquinox.Projection
#125 ChangeFeedObserver
: Madeassign
andrevoke
extensibility points in builderasync
#124ChangeFeedObserver
: RenamedChangeFeedObserver
'sprocessBatch
toingest
and documented role ofIChangeFeedObserverContext.Checkpoint
in more detail #124- Targeted
Jet.ConfluentKafka.FSharp
v1.0.0-rc6
ineqx
tool
2.0.0-preview5 - 2019-04-12
- exposed
assign
andrevoke
extensibility points inChangeFeedObserver
builder #119
- switched ChangeFeedProcessor checkpointing to be explicit (was automatic) based on requirements of
equinox-sync
template PR #19 #119
- Added
partitionRangeId
context toChangeFeedObserver
logging #119
2.0.0-preview4 - 2019-04-03
- 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
- Targeted
Jet.ConfluentKafka.FSharp
v1.0.0-rc2
ineqx
tool - Removed special casing of
Tip
batches fromEquinox.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
- Reading
null
from 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 anaux
collection in account other than the one being read from by addingauxAccountKey
param #115- Support ETL scenarios by enabling the event creation
Timestamp
to be [read and] written by supplying it inEquinox.Codec.IEvent
#116
- Rename
Equinox.Projection.Codec
NuGet toEquinox.Projection
(no code changes) - Renamespace and separate
Equinox.Codec
toEquinox.Codec.NewtonsoftJson
andEquinox.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)
- Remove
maxEventsPerSlice
/maxTipEvents
pending #109
2.0.0-preview1 - 2019-03-07
- Provide capability to access
Metadata
andEventNumber
/Index
re #102
- Make
caching
non-optional inCosmosStreamResolver
; addNoCaching
cache mode forEquinox.Cosmos
#104 @jakzale - Reorder
caching
andaccess
inGesStreamResolver
to matchCosmosStreamResolver
#107 - Renamespaced and separated
Equinox.Codec
APIs to separateNewtonsoft.Json
and customencode
/tryDecode
approaches #102 (in preparation for #79)
- Extract
Equinox.Projection.Kafka
and its integration tests to becomeJet.ConfluentKafka.FSharp
v1.0.0-preview1
; retargetedEquinox.Tool
to 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.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
- 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
Context
API as primary Handler API withTransact
; CompatibleAccumulator
remains to facilitate porting #97 @eiriktsarpalis - Replace
Handler
withStream
- Replace
Equinox.Cosmos.Eqx*
withCosmos*
@jakzale - Replace
Equinox.MemoryStore.Mem*
withMemory*
- Moved internal
Stream
helpers fromEquinox
to instead be inlined into Store impls #97 @eiriktsarpalis - De-emphasized
Handler
in sample aggregates @jakzale
1.1.0-preview1 - 2019-02-08
Equinox.Cosmos
projection facilities, see #87
1.0.4 - 2019-02-08
- Rename
Equinox.CatId
toEquinox.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 onnet461
to fit in with constraints of a downstream) - Refactor
Equinox.Cosmos
wiring to exposeCosmosConnector.ConnectionPolicy
- Use
FSharp.UMX
from @alfonsogarciacaro and @eiriktsarpalis in tests/samples #89 (HT @chinwobble in #83 for prompting the change)
- Improve CosmosDb connection string parse error message 5b1b56bd94350ef47bd84ddbbb5b028e45fbb462
- change from
licenseUrl
tolicense
in.nupkg
- Make
xUnit
dependency 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!)