Release v16.24.0
Summary
Reading a read model instance no longer depends on which kind of observer builds it. When a read model is materialized — the default for both projections and reducers — Chronicle now serves it from the sink and releases its PII before it leaves the kernel. Only a passive read model, which has no sink, is still computed on demand from its events.
Previously only projections read the sink. A reducer-backed read model was folded from its whole event stream on every read, and GetInstances replayed the entire log even for a read model whose state was already stored.
Changed
IReadModels.GetInstanceByIdresolves a materialized reducer-backed read model from the materialized store instead of replaying its events, with PII released server-side (#3605)IReadModels.GetInstancesreturns the stored instances for a materialized read model instead of replaying the event log; passing an explicit event count still replays (#3605)- A reducer-backed read model no longer needs a connected reducer client to be read by key (#3605)
- Read model instance reads are eventually consistent unless the read model is marked
[Passive]— mark it passive where a read must reflect an append that just happened (#3605)
Fixed
- PII is now released on the non-generic
IReadModels.GetInstanceById(Type, ...)for reducer-backed read models, which is how reactors resolve read model parameters — it previously returned encrypted values (#3605) - A read model instance request for a reducer-backed read model is made against the event sequence that reducer reduces from, rather than always the event log (#3605)