Allow subscribing to reflector store updates #1426
Draft
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Motivation
This is largely a "shower thoughts" take on #1189 and the discussions from the last office hours.
It still fails
controller::tests::applier_must_not_deadlock_if_reschedule_buffer_fills
and introduces some type safety regressions that I'm not quite sure how to fix.Solution
It introduces a new (internal)
Broadcaster
channel, which has the backpressure and broadcasting properties that we need (async-channel
is inappropriate after all since it only sends each message to one receiver).It then adds an interface to
reflector::store::Writer
for subscribing to changes.This all leads to a fair amount of changes to
reflector
and its downstreams to accomodate forWriter::apply_watcher_event
now being async (so that it can send out the appropriate events).