From 2ea27e897b9889e24276aedaa77fdcff3c44fd69 Mon Sep 17 00:00:00 2001 From: Spike Curtis Date: Fri, 17 Apr 2026 22:58:33 -0400 Subject: [PATCH] chore: split Pubsub interface into Publisher and Subscriber (#24442) Splits the Pubsub into Publisher and Subscriber interfaces. Allows components to scope down their needs if they only publish or only subscribe. This allows smaller fakes/mocks and generally better encapsulation. --- coderd/database/pubsub/pubsub.go | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/coderd/database/pubsub/pubsub.go b/coderd/database/pubsub/pubsub.go index d227063ba8..86f7217b16 100644 --- a/coderd/database/pubsub/pubsub.go +++ b/coderd/database/pubsub/pubsub.go @@ -33,12 +33,20 @@ var ErrDroppedMessages = xerrors.New("dropped messages") // LatencyMeasureTimeout defines how often to trigger a new background latency measurement. const LatencyMeasureTimeout = time.Second * 10 +type Subscriber interface { + Subscribe(event string, listener Listener) (cancel func(), err error) + SubscribeWithErr(event string, listener ListenerWithErr) (cancel func(), err error) +} + +type Publisher interface { + Publish(event string, message []byte) error +} + // Pubsub is a generic interface for broadcasting and receiving messages. // Implementors should assume high-availability with the backing implementation. type Pubsub interface { - Subscribe(event string, listener Listener) (cancel func(), err error) - SubscribeWithErr(event string, listener ListenerWithErr) (cancel func(), err error) - Publish(event string, message []byte) error + Subscriber + Publisher Close() error }