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