Release v16.22.2
Summary
A rolling redeploy of client services could turn projection registration into a self-sustaining storm: every replica re-registered the same definitions on startup, the kernel processed the full fan-out every time, callers timed out while their request was still queued, and their retries enqueued the same workload again - so the queue never drained. This makes an identical re-registration near-free on the kernel and stops the client from stacking retries.
Fixed
- Registering projection definitions that are identical to the ones already registered no longer repeats the registration fan-out - the kernel only processes definitions that are new or changed, so restarting or reconnecting clients of the same version register near-instantly and queued duplicate registrations collapse instead of piling up
- The .NET client no longer stacks registration retries:
RegisterAllruns as a single flight per event store - a call arriving while a registration is in flight joins that run instead of sending a duplicate - and a run that follows a failure waits an exponentially growing, jittered backoff before hitting the kernel again - An interrupted registration is retried in full on the next attempt instead of being skipped as already registered
🤖 Generated with Claude Code