From 756bc0a4cadee75a22564ac82be69312c86b5f77 Mon Sep 17 00:00:00 2001 From: Dan Fuhry Date: Sat, 14 Mar 2026 19:34:49 -0400 Subject: [PATCH] [sd] add AddressUpdate type for easier stringification --- grpc/internal/client/client.go | 6 +++--- grpc/internal/client/dns_srv.go | 4 ++-- sd/watcher.go | 20 +++++++++++++++----- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/grpc/internal/client/client.go b/grpc/internal/client/client.go index 990e7c7..c7ce9d3 100644 --- a/grpc/internal/client/client.go +++ b/grpc/internal/client/client.go @@ -25,7 +25,7 @@ type Client interface { type ClientOption = option.Option[*client] type AddressProvider interface { - GetAddrs(context.Context) ([]sd.ServiceAddress, error) + GetAddrs(context.Context) (sd.AddressUpdate, error) } type client struct { @@ -38,10 +38,10 @@ type client struct { } type staticAddressProvider struct { - addresses []sd.ServiceAddress + addresses sd.AddressUpdate } -func (s *staticAddressProvider) GetAddrs(_ context.Context) ([]sd.ServiceAddress, error) { +func (s *staticAddressProvider) GetAddrs(_ context.Context) (sd.AddressUpdate, error) { return s.addresses, nil } diff --git a/grpc/internal/client/dns_srv.go b/grpc/internal/client/dns_srv.go index 00241e9..eedd375 100644 --- a/grpc/internal/client/dns_srv.go +++ b/grpc/internal/client/dns_srv.go @@ -14,13 +14,13 @@ type dnsSrvAddressProvider struct { var _ AddressProvider = &dnsSrvAddressProvider{} -func (d *dnsSrvAddressProvider) GetAddrs(context.Context) ([]sd.ServiceAddress, error) { +func (d *dnsSrvAddressProvider) GetAddrs(context.Context) (sd.AddressUpdate, error) { results, err := dns.ResolveSRV(d.serverId.Name(), "grpc", constants.SDDomain) if err != nil { return nil, err } - var sdAddrs []sd.ServiceAddress + var sdAddrs sd.AddressUpdate for _, r := range results { sdAddrs = append(sdAddrs, sd.ServiceAddress{ Hostname: r.Hostname, diff --git a/sd/watcher.go b/sd/watcher.go index 9b57c07..e43e859 100644 --- a/sd/watcher.go +++ b/sd/watcher.go @@ -28,7 +28,7 @@ type SDWatcher struct { lock *sync.RWMutex wg *sync.WaitGroup results []ServiceAddress - watchers chan []ServiceAddress + watchers chan AddressUpdate watcherCount int } @@ -45,6 +45,8 @@ type ServiceAddress struct { key string } +type AddressUpdate []ServiceAddress + func (w *SDWatcher) init() error { if w.Region == "" { w.Region = "dns" @@ -68,7 +70,7 @@ func (w *SDWatcher) init() error { } if w.lock == nil { - w.watchers = make(chan []ServiceAddress, 10) + w.watchers = make(chan AddressUpdate, 10) w.starter = &sync.Once{} w.lock = &sync.RWMutex{} w.wg = &sync.WaitGroup{} @@ -78,7 +80,7 @@ func (w *SDWatcher) init() error { return nil } -func (w *SDWatcher) GetAddrs(ctx context.Context) ([]ServiceAddress, error) { +func (w *SDWatcher) GetAddrs(ctx context.Context) (AddressUpdate, error) { err := w.init() if err != nil { return nil, err @@ -150,9 +152,9 @@ func (w *SDWatcher) publishResults(kvs map[string][]byte) { } } -func (w *SDWatcher) WatchUpdates(ctx context.Context) chan []ServiceAddress { +func (w *SDWatcher) WatchUpdates(ctx context.Context) chan AddressUpdate { w.watcherCount++ - och := make(chan []ServiceAddress) + och := make(chan AddressUpdate) go (func() { defer func() { w.watcherCount-- }() @@ -233,3 +235,11 @@ func (sa ServiceAddress) ToURI() *url.URL { Path: fmt.Sprintf("/%s", sa.Protocol.String()), } } + +func (au AddressUpdate) String() string { + out := fmt.Sprintf("%d addrs:\n", len(au)) + for i, a := range au { + out += fmt.Sprintf(" addr %d: hostname=%q ip4=%q ip6=%q node=%q port=%d protocol=%q service=%q shard=%q\n", i, a.Hostname, a.IP4, a.IP6, a.Node, a.Port, a.Protocol, a.Service, a.Shard) + } + return strings.TrimSpace(out) +} -- 2.52.0