]> go.fuhry.dev Git - runtime.git/commitdiff
[sd] add AddressUpdate type for easier stringification
authorDan Fuhry <dan@fuhry.com>
Sat, 14 Mar 2026 23:34:49 +0000 (19:34 -0400)
committerDan Fuhry <dan@fuhry.com>
Sun, 15 Mar 2026 01:17:54 +0000 (21:17 -0400)
grpc/internal/client/client.go
grpc/internal/client/dns_srv.go
sd/watcher.go

index 990e7c7a442f6065b5c031db0522041a813aa7c9..c7ce9d37998d669fddec2a6ab35c96aa8ce7c6e7 100644 (file)
@@ -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
 }
 
index 00241e9efc25af432d9daaef9a8a444e8ac3365b..eedd3757393b190272c140f1d7301e13580e036f 100644 (file)
@@ -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,
index 9b57c0735de465a0bd8038cafd4b7f3a9101d475..e43e859f803e7d488f4ce46342a2aea1ed8474fc 100644 (file)
@@ -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)
+}