remove exposureRelay
Kim committed
Mar 17, 2026 at 12:30 UTC
36e19f2b28e98c62b50f9ef70254ef24fab8d17a
1 file changed
+37
-39
sdk/expose.go
+37
-39
@@ -21,7 +21,7 @@ import (
21
// traffic from all of them through one net.Listener.
22
type Exposure struct {
23
listener net.Listener
24
- relays []exposureRelay
24
+ listeners []*Listener
25
done chan struct{}
26
27
closeOnce sync.Once
@@ -39,12 +39,12 @@ func Expose(ctx context.Context, relayUrls []string, name string, metadata types
39
if len(relayURLs) == 0 {
40
return nil, nil
41
}
42
- relays := make([]exposureRelay, 0, len(relayURLs))
42
+ listeners := make([]*Listener, 0, len(relayURLs))
43
cleanup := func() error {
44
var closeErr error
45
- for _, relay := range relays {
46
- if relay.listener != nil {
47
- closeErr = errors.Join(closeErr, relay.listener.Close())
45
+ for _, listener := range listeners {
46
+ if listener != nil {
47
+ closeErr = errors.Join(closeErr, listener.Close())
48
}
49
}
50
return closeErr
@@ -59,32 +59,29 @@ func Expose(ctx context.Context, relayUrls []string, name string, metadata types
59
return nil, errors.Join(fmt.Errorf("listen %q: %w", relayURL, err), cleanup())
60
}
61
62
- relays = append(relays, exposureRelay{
63
- relayURL: relayURL,
64
- listener: listener,
65
- })
62
+ listeners = append(listeners, listener)
63
}
64
68
- listeners := make([]net.Listener, 0, len(relays))
69
- for _, relay := range relays {
70
- listeners = append(listeners, relay.listener)
65
+ mergedListeners := make([]net.Listener, 0, len(listeners))
66
+ for _, listener := range listeners {
67
+ mergedListeners = append(mergedListeners, listener)
68
}
69
73
- merged, err := mergeListeners(listeners...)
70
+ merged, err := mergeListeners(mergedListeners...)
71
if err != nil {
72
return nil, errors.Join(fmt.Errorf("merge listeners: %w", err), cleanup())
73
}
74
75
exposure := &Exposure{
76
listener: merged,
80
- relays: relays,
77
+ listeners: listeners,
78
done: make(chan struct{}),
79
}
80
go exposure.monitorStartupCounts(ctx)
81
82
log.Info().
83
Str("release_version", types.ReleaseVersion).
87
- Int("relay_count", len(exposure.relays)).
84
+ Int("relay_count", len(exposure.listeners)).
85
Strs("relays", exposure.RelayURLs()).
86
Msgf("exposure relay started")
87
@@ -133,30 +130,33 @@ func (e *Exposure) Addr() net.Addr {
130
131
// RelayURLs returns the normalized relay URLs backing the exposure.
132
func (e *Exposure) RelayURLs() []string {
136
- if e == nil || len(e.relays) == 0 {
133
+ if e == nil || len(e.listeners) == 0 {
134
return nil
135
}
136
140
- out := make([]string, 0, len(e.relays))
141
- for _, relay := range e.relays {
142
- out = append(out, relay.relayURL)
137
+ out := make([]string, 0, len(e.listeners))
138
+ for _, listener := range e.listeners {
139
+ if listener == nil {
140
+ continue
141
+ }
142
+ out = append(out, listener.relayURL)
143
}
144
return out
145
}
146
147
// PublicURLs returns the de-duplicated public URLs exposed by the exposure.
148
func (e *Exposure) PublicURLs() []string {
149
- if e == nil || len(e.relays) == 0 {
149
+ if e == nil || len(e.listeners) == 0 {
150
return nil
151
}
152
153
- out := make([]string, 0, len(e.relays))
153
+ out := make([]string, 0, len(e.listeners))
154
seen := make(map[string]struct{})
155
- for _, relay := range e.relays {
156
- if relay.listener == nil {
155
+ for _, listener := range e.listeners {
156
+ if listener == nil {
157
continue
158
}
159
- rawURL := relay.listener.PublicURL()
159
+ rawURL := listener.PublicURL()
160
if rawURL == "" {
161
continue
162
}
@@ -199,12 +199,12 @@ func (e *Exposure) Close() error {
199
}
200
201
event := log.Info().
202
- Int("relay_count", len(e.relays)).
202
+ Int("relay_count", len(e.listeners)).
203
Strs("relays", e.RelayURLs())
204
if closeErr != nil {
205
event = log.Warn().
206
Err(closeErr).
207
- Int("relay_count", len(e.relays)).
207
+ Int("relay_count", len(e.listeners)).
208
Strs("relays", e.RelayURLs())
209
}
210
event.Msg("exposure closed")
@@ -325,17 +325,17 @@ func (e *Exposure) monitorStartupCounts(ctx context.Context) {
325
326
ticker := time.NewTicker(time.Second)
327
defer ticker.Stop()
328
- prevStatuses := make(map[string]listenerStatus, len(e.relays))
328
+ prevStatuses := make(map[string]listenerStatus, len(e.listeners))
329
firstRun := true
330
331
for {
332
readyCount, inactiveCount := 0, 0
333
activated := make([]string, 0)
334
deactivated := make([]string, 0)
335
- for _, relay := range e.relays {
335
+ for _, listener := range e.listeners {
336
status := listenerStatusInactive
337
- if relay.listener != nil {
338
- status = relay.listener.StartupStatus()
337
+ if listener != nil {
338
+ status = listener.StartupStatus()
339
}
340
if status == listenerStatusReady {
341
readyCount++
@@ -343,14 +343,17 @@ func (e *Exposure) monitorStartupCounts(ctx context.Context) {
343
inactiveCount++
344
}
345
346
- if prev, ok := prevStatuses[relay.relayURL]; ok && prev != status {
346
+ if listener == nil {
347
+ continue
348
+ }
349
+ if prev, ok := prevStatuses[listener.relayURL]; ok && prev != status {
350
if status == listenerStatusReady {
348
- activated = append(activated, relay.relayURL)
351
+ activated = append(activated, listener.relayURL)
352
} else {
350
- deactivated = append(deactivated, relay.relayURL)
353
+ deactivated = append(deactivated, listener.relayURL)
354
}
355
}
353
- prevStatuses[relay.relayURL] = status
356
+ prevStatuses[listener.relayURL] = status
357
}
358
359
if firstRun || len(activated) > 0 || len(deactivated) > 0 {
@@ -377,11 +380,6 @@ func (e *Exposure) monitorStartupCounts(ctx context.Context) {
380
}
381
}
382
380
-type exposureRelay struct {
381
- relayURL string
382
- listener *Listener
383
-}
384
-
383
type exposureConn struct {
384
net.Conn
385
id uint64