Repository navigation
Release v19.105.0
Summary
Chronicle kernel nodes can now be clustered through SQL Server or PostgreSQL storage, with a guide for running Chronicle on Azure. SQL read-model indexes and joins behave better on populated tables.
Added
- Set
clustering.typetoSqlto cluster kernel nodes through the configured SQL Server or PostgreSQL storage, without MongoDB. Localhost remains the default, and SQLite storage is not supported for clustering. See Clustering. (#5127) - A guide for running Chronicle on Azure with Microsoft Entra ID: Azure SQL with managed identity, authenticated connection resolution, health checks, webhooks and clustering. See Run Chronicle on Azure. (part of #5127)
- A runbook for rolling out a new version to a multi-node cluster on SQL storage, including what each starting node does to the database and the guarantees Chronicle does not give. See Roll out a new version. (part of #5127)
- Cluster membership probe, heartbeat and table refresh timings, probe counts and death-vote thresholds can now be configured for SQL and MongoDB clusters. Unset options retain the Orleans defaults. See Clustering. (#5209)
- SQL read-model indexes build in the background on populated tables, using online builds where supported. Changed index declarations remove obsolete Chronicle-owned indexes without removing custom indexes. (#5195)
- SQL Server string indexes honor
MaxLength,StringLength, andLength, with a default bound of 450 characters for indexed strings without a declared length. Overlong writes now fail the projection partition instead of storing an unbounded value; replay existing read models to apply the bounded column mapping. (#5197)
Changed
- SQL joins and child removals filter candidate rows in the database before loading documents, while preserving existing path and value matching. (#5196)
- The Connections, Contracts, Workbench and Infrastructure NuGet packages now have descriptions, and Infrastructure has tags. (#5235)
- The Maven
io.cratis:chronicle-contractsartifact is now described as generated gRPC contracts instead of a Kotlin client, and the Maven, Hex and Python contracts packages link to the documentation on cratis.io. (#5235)
Fixed
- Several kernel nodes starting at the same time against SQL storage no longer fail when they race to create databases, run migrations or register the same system state. (part of #5127)
- The kernel now refuses to start when MongoDB clustering is configured with SQLite, SQL Server, PostgreSQL or in-memory storage, or SQL clustering with storage other than SQL Server or PostgreSQL, instead of failing later at runtime. (part of #5127)
- The development kernel state reset is refused while SQL clustering is active, so it cannot wipe state shared by other nodes. (part of #5127)
- Removing a reminder on SQL storage is now atomic and issues a new ETag, so concurrent nodes no longer overwrite each other's reminder changes. (part of #5127)
- Reactors and reducers whose client stays connected now resume delivery after a kernel node in the cluster is lost, instead of stopping until the client reconnects. (#5230)