Repository navigation
Release v19.20.0
This PR consolidates five fixes into one release. Each fix was reviewed on its own, and the combined branch passed the full Release build and all spec projects.
Added
- A kernel option
Events.CausationPropertyRetention(events.causationPropertyRetentioninchronicle.json,Cratis__Chronicle__Events__CausationPropertyRetentionin the environment) with valuesRetain(default, unchanged behavior) andOmit.Omitstores each causation entry's type and time but empties its property values, on single and batch appends, revisions, redaction and forwarding to other event stores.- It prevents new retention only; values stored earlier are not rewritten. #4238 stays open for the classification-based follow-up (#4238)
ReactorScenarioaccepts a per-runDefaults, so reactor specs can use event types generated for that run.- Each in-process test event store registers its own event types instead of the process-wide set (#4162)
Fixed
-
The kernel no longer fails to start when another socket briefly holds its port. On Linux, port 35000 lies in the ephemeral source-port range, so an outbound connection made during startup could briefly take it, and the kernel then failed with "address already in use".
- The kernel now retries only that bind error, for up to 30 seconds (the new
BindTimeoutoption;00:00:00turns it off). The retry stops as soon as shutdown is requested. - The diagnostics name the socket holding the port (#4174)
- The kernel now retries only that bind error, for up to 30 seconds (the new
-
A projection replay is treated as finalized only when at least one silo actually finalizes it.
- A failed replay setup (
Establish) is reported instead of ignored. - Before this, a replay could be treated as complete and clear failed partitions even though the read-model swap never happened (#4243)
- A failed replay setup (
-
Failed partitions from the final MongoDB bulk flush of a catch-up or replay are now recorded as failed partitions. Previously they were discarded and the catch-up reported success (#4257)
Changed
- Test fixtures wait for PostgreSQL's final server instead of the temporary initialization server. They pin SQL Server to
2022-CU20-ubuntu-22.04with 3 GB of memory, retry a SQL Server container that exits during startup once, and reserve the kernel ports from the ephemeral range where the container runtime allows it. This removes CI flakes (#4174)
Fixed (CI regressions on SQL storage, found while releasing this batch)
- Projection replays on SQL storage (SQLite, PostgreSQL, SQL Server) no longer fail. This covers replays after a projection definition change and every replay after the first. The replay context's generation column was missing, the replayed-read-model table was mapped under the wrong name (the table is now keyed by observer and replay start), and replayed tables kept their temporary primary-key names after the swap. #4243 exposed these long-standing SQL bugs by no longer ignoring replay start and finalization errors.
- Primary-key names on PostgreSQL and SQL Server are now distinct within the identifier limits (a readable prefix plus a hash). Replay starts are stored at microsecond precision, and recording a replay twice is idempotent.
Known limitation, pre-existing and tracked in #4340: containers whose names reach PostgreSQL's 63-byte table-name limit once suffixed (about 49 bytes or more) can still collide on backup and shadow table names.