EventStoreDB 5.0.0 is out! It is available for the following operating systems:
It’s been some months since our last stable release of EventStore as we’ve invested time in increasing the stability of the server, providing higher quality builds and improving our user and developer experience.
There are some significant breaking changes, so we’ve decided to bump up the version to 5. EventStore’s policy is to support the two latest major versions. Thus, as from now on, we will no longer support v3 and will continue to support v4 by providing important bug fixes. We, however, recommend all our users to upgrade to v5 to benefit from all the stability and performance improvements as well as the new features.
Downloads are available on our website.
The packages can be installed using the following instructions.
Ubuntu 14.04/16.04/18.04 (via packagecloud)
curl -s https://packagecloud.io/install/repositories/EventStore/EventStore-OSS/script.deb.sh | sudo bash
sudo apt-get install eventstore-oss=5.0.0-1
Windows (via Chocolatey)
choco install eventstore-oss -version 5.0.0
Client Packages
EventStore Client
We highly discourage using EventStore.Client version 5.0.0 due to a severe bug mentioned in the bug fixes section. Please use version 5.0.1.
dotnet add package EventStore.Client --version 5.0.1
dotnet add package EventStore.Client.Embedded --version 5.0.0
netstandard2.0
framework. This means that the client can be consumed by .NET Core 2.0+ projects. We previously had a separate .NET Core client. This is the first step in the effort to migrate EventStore towards .NET Core. We are also planning to migrate the server in the near future.net452
framework. We previously targeted only the net46
framework..pkg
installer and tarball package is currently available for download. A Homebrew package is also in progress.If you’re running an EventStore cluster, we recommend you upgrade to version 5.0.0 by doing a rolling upgrade from version 4.1.1-hotfix1 without downtime:
EventStore.ClientAPI.StreamCheckpoint.StreamStart
has been changed to a long?
instead of an int?
net471
) instead of .NET Framework v4.6+ projects (net46
).MaxAutoMergeIndexLevel
feature, version 2 of the indexmap
file format has been introduced. This means that downgrading EventStore from version 5 to 4.x will require a full index rebuild. There is an easy workaround that does not require index rebuilds - please feel free to contact support or open a Github issue if you need help about that.StructuredLog: False
to your config or launch EventStore with --structured-log=False
. We have tried our best to keep the output similar to 4.x but the format of some lines may have changed.$by_correlation_id
$correlationId
property (configurable in the $by_correlation_id
projection source) will be emitted to a stream called $bc-<correlation id>
MaxAutoMergeIndexLevel (int)
has been added which defines the highest PTable level up to which PTable index files will be merged automatically. Let’s denote the maximum merge level you have set in your configuration by L
to simplify the explanation below.L
, an endpoint URL can be manually triggered by doing a POST
request to /admin/mergeindexes
. This will merge all the PTables at level L
to level L+1
. Also, if there are any PTables that are at level L+2
or higher they will be merged down to level L+1
.MaxMemTableSize
which is 1M
by default):
FaultOutOfOrderProjections
option (default: True
) to allow the user to specify if a projection should be faulted when there is a discontinuity in event ordering. For example, if a stream has a $maxAge
or $maxCount
, a projection processing this stream may not receive some events if they have already “expired”. In case FaultOutOfOrderProjections
is set to False
, an error is logged and the projection will continue processing events.$by_correlation_id
projection must be turned on for this feature to work. To access this feature, you can go to the Visualize
tab in the Web UI menu. View screenshotestestclient
EVENTSTORE_EXT_IP=172.16.12.34
when launching the node is equivalent to adding ExtIP: 172.16.12.34
to your config file.${env:REFERENCED_ENV_VAR}
. For instance, if you’re on Azure Service Fabric some predefined environment variables exist. You could thus set EVENTSTORE_EXT_IP=${env:Fabric_NodeIPOrFQDN}
to easily reference the node’s IP address.EventStore.ClientAPI.StreamCheckpoint.StreamStart
to a long?
instead of an int?
(thanks to @sjmelia!)SubscriptionDropReason.ProcessingQueueOverflow
instead of SubscriptionDropReason.UserInitiated
(thanks to @alexeyzimarev!)ProjectionsManager
and ProjectionsClient
(thanks to @BredStik!)Special thanks from the EventStore team to two open source contributors: Laurence Pike (@lscpike) and James Connor (@megakid) who contributed all of the following awesome features:
InitializationThreads
to specify number of threads used to load chunk and index files. This can have a significant impact on startup times.ReduceFileCachePressure
that disables the FileOptions.RandomAccess
cache flag when opening chunk files. This is particularly worth trying if the Windows File Cache is holding up a huge amount of memory./admin/scavenge/{scavengeId}
./admin/scavenge?startFromChunk=chunkNumber
./admin/scavenge?startFromChunk=chunkNumber&threads=numThreads
PersistentSubscriptionsManager
class to the Client API. This wrapper around the HTTP API allows a developer to easily control persistent subscriptions.FailOnNoServerResponse()
combined with KeepReconnecting()
would cause the client to hang indefinitelyEventStore.Client
shortly after release of EventStore v5 which causes the client not to be able to reconnect to the server if the TCP connection was closed on the client side (for instance, due to a client-side heartbeat timeout). This bug has been fixed in version 5.0.1 of the client and version 5.0.0 has been unlisted from nuget.org due to the severity of this bug.ObjectPoolMaxLimitReachedException
for many reader threads (thanks to @MadKat13!)--reader-threads-count
is increased, the object pool size was not scaled up accordingly. The following error would be thrown during high read load: Object pool 'ReadIndex readers pool' has reached its max limit for items: 14.
Error while reading drive info for path "/path/to/db". Message: "The drive name does not exist
Parameter name: driveName".
MakeUrl()
where url is wrongly formed when query parameters are present. This would cause the UI to throw an error when opening the Query
tab.$PersistentSubscriptionConfig
to limit the size of the stream. The stream size was previously unbounded./usr/share/eventstore/plugins
on Linux and /usr/local/share/eventstore/plugins
on macOS.ProjectionService.js -> updateQuery()
causing the source
to be set to emit
value when an empty string is passed as source
.testclient.conf
for the EventStore test client instead of eventstore.conf
.InitializationThreads
to specify number of threads used to load chunk and index files. This can have a significant impact on startup times. (thanks to @megakid!)ReduceFileCachePressure
that disables the FileOptions.RandomAccess
cache flag when opening chunk files. This is particularly worth trying if the Windows File Cache is holding up a huge amount of memory. (thanks to @lscpike!)StorageMessage.EventCommitted
messages when rebuilding the index. This speeds up full index rebuilds by a factor of approximately 1.8x and also speeds up node startup time by a few seconds when there are many index entries to rebuild.--optimize=inline
mono runtime optimization to native packagesThe following internal aspects of EventStore have been improved:
We appreciate any feedback via either GitHub Issues or forum.