fix: update waitRetry method to include reverse session slot and enhance logging
Kim committed
Apr 15, 2026 at 17:43 UTC
0a537d461b7a7749bea3e5bbd1174c789bc0c042
1 file changed
+28
-22
sdk/listener.go
+28
-22
@@ -160,7 +160,7 @@ func (l *listener) run(ctx context.Context) {
160
return
161
}
162
retries++
163
- if !l.waitRetry(ctx, "lease registration", err, retries) {
163
+ if !l.waitRetry(ctx, "lease registration", err, retries, 0) {
164
_ = l.Close()
165
return
166
}
@@ -187,6 +187,12 @@ func (l *listener) run(ctx context.Context) {
187
_ = lease.tlsCloser.Close()
188
}
189
l.resetTransport()
190
+ relayURL := l.relayURL.String()
191
+ log.Debug().
192
+ Err(err).
193
+ Str("relay_url", relayURL).
194
+ Str("address", l.identity.Address).
195
+ Msg("lease refresh required; re-registering")
196
continue
197
}
198
@@ -391,9 +397,10 @@ func (l *listener) runLease(ctx context.Context) error {
397
398
errCh := make(chan error, max(l.readyTarget, 1)+1)
399
if l.stream != nil && l.readyTarget > 0 {
394
- for range l.readyTarget {
400
+ for sessionSlot := range l.readyTarget {
401
+ sessionSlot++
402
go func() {
396
- if err := l.runReverseSessionLoop(leaseCtx, lease.tlsConfig); err != nil {
403
+ if err := l.runReverseSessionLoop(leaseCtx, lease.tlsConfig, sessionSlot); err != nil {
404
select {
405
case errCh <- err:
406
case <-leaseCtx.Done():
@@ -423,7 +430,7 @@ func (l *listener) runLease(ctx context.Context) error {
430
}
431
}
432
426
-func (l *listener) runReverseSessionLoop(ctx context.Context, tlsConfig *tls.Config) error {
433
+func (l *listener) runReverseSessionLoop(ctx context.Context, tlsConfig *tls.Config, sessionSlot int) error {
434
if l.stream == nil {
435
return nil
436
}
@@ -436,7 +443,7 @@ func (l *listener) runReverseSessionLoop(ctx context.Context, tlsConfig *tls.Con
443
return nil
444
}
445
retries++
439
- if !l.waitRetry(ctx, "reverse session connect", err, retries) {
446
+ if !l.waitRetry(ctx, "reverse session connect", err, retries, sessionSlot) {
447
return err
448
}
449
continue
@@ -452,7 +459,7 @@ func (l *listener) runReverseSessionLoop(ctx context.Context, tlsConfig *tls.Con
459
retries = 0
460
default:
461
retries++
455
- if !l.waitRetry(ctx, "reverse session connect", err, retries) {
462
+ if !l.waitRetry(ctx, "reverse session connect", err, retries, sessionSlot) {
463
return err
464
}
465
}
@@ -679,7 +686,7 @@ func (l *listener) runRenewLoop(ctx context.Context) error {
686
}
687
688
retries++
682
- if !l.waitRetry(ctx, "lease renewal", err, retries) {
689
+ if !l.waitRetry(ctx, "lease renewal", err, retries, 0) {
690
return err
691
}
692
}
@@ -793,7 +800,7 @@ func (l *listener) registerAndConfigure(ctx context.Context) error {
800
return nil
801
}
802
796
-func (l *listener) waitRetry(ctx context.Context, operation string, err error, retries int) bool {
803
+func (l *listener) waitRetry(ctx context.Context, operation string, err error, retries, reverseSessionSlot int) bool {
804
if ctx.Err() != nil {
805
return false
806
}
@@ -807,30 +814,29 @@ func (l *listener) waitRetry(ctx context.Context, operation string, err error, r
814
Str("operation", operation).
815
Str("address", l.identity.Address).
816
Logger()
817
+ if reverseSessionSlot > 0 {
818
+ logger = logger.With().Int("reverse_session_slot", reverseSessionSlot).Logger()
819
+ }
820
821
if l.retryCount > 0 && retries > l.retryCount {
822
if l.relaySet != nil && relayURL != "" {
823
l.relaySet.UnconfirmRelayURL(relayURL)
824
l.relaySet.RecordRelayFailure(relayURL, err, 1)
825
}
816
- if operation != "lease renewal" {
817
- logger.Error().
818
- Err(err).
819
- Int("retry_count", l.retryCount).
820
- Msg("retry budget exhausted")
821
- }
822
- return false
823
- }
824
-
825
- if operation != "lease renewal" {
826
- logger.Debug().
826
+ logger.Error().
827
Err(err).
828
- Int("retry_attempt", retries).
828
Int("retry_count", l.retryCount).
830
- Dur("retry_wait", l.retryWait).
831
- Msg("operation failed; retrying")
829
+ Msg("retry budget exhausted")
830
+ return false
831
}
832
833
+ logger.Debug().
834
+ Err(err).
835
+ Int("retry_attempt", retries).
836
+ Int("retry_count", l.retryCount).
837
+ Dur("retry_wait", l.retryWait).
838
+ Msg("operation failed; retrying")
839
+
840
return utils.SleepOrDone(ctx, l.retryWait)
841
}
842