Skip to content

Commit 1ea8fec

Browse files
committed
fix: clamp reconnect backoff delay and add observability logging
1 parent 809a997 commit 1ea8fec

4 files changed

Lines changed: 11 additions & 5 deletions

File tree

engine.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,7 @@ func (e *RTCEngine) createSubscriberPCLocked(configuration webrtc.Configuration)
486486
} else if c.Label() == lossyDataChannelName {
487487
e.lossyDCSub = c
488488
} else {
489+
e.log.Warnw("received unknown data channel label, ignoring", nil, "label", c.Label())
489490
return
490491
}
491492
c.OnMessage(e.handleDataPacket)
@@ -626,6 +627,7 @@ func (e *RTCEngine) UnregisterTrackPublishedListener(cid string) {
626627
func (e *RTCEngine) handleDataPacket(msg webrtc.DataChannelMessage) {
627628
packet, err := e.readDataPacket(msg)
628629
if err != nil {
630+
e.log.Warnw("failed to parse data packet", err, "isString", msg.IsString)
629631
return
630632
}
631633
identity := packet.ParticipantIdentity
@@ -733,10 +735,10 @@ func (e *RTCEngine) handleDisconnect(fullReconnect bool) {
733735
}
734736
}
735737

736-
delay := time.Duration(reconnectCount*reconnectCount) * initialReconnectInterval
737-
if delay > maxReconnectInterval {
738-
break
739-
}
738+
// Quadratic backoff: delay grows as reconnectCount² × initialReconnectInterval.
739+
// Clamped to maxReconnectInterval so a future increase to maxReconnectCount
740+
// cannot produce unbounded delays or skip the final OnDisconnected call.
741+
delay := min(time.Duration(reconnectCount*reconnectCount)*initialReconnectInterval, maxReconnectInterval)
740742
if reconnectCount < maxReconnectCount-1 {
741743
time.Sleep(delay)
742744
}

localparticipant.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -747,7 +747,7 @@ func (p *LocalParticipant) updateSubscriptionPermissionLocked() {
747747
}
748748

749749
if err := p.engine.SendSubscriptionPermission(p.subscriptionPermission); err != nil {
750-
logger.Errorw(
750+
p.log.Errorw(
751751
"could not send subscription permission", err,
752752
"participant", p.identity,
753753
"participantID", p.sid,

remoteparticipant.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ func (p *RemoteParticipant) addSubscribedMediaTrack(
112112
}
113113
time.Sleep(50 * time.Millisecond)
114114
}
115+
p.engine.log.Warnw("timed out waiting for track publication metadata", nil, "trackSID", trackSID, "participant", p.Identity())
115116
p.Callback.OnTrackSubscriptionFailed(trackSID, p)
116117
p.roomCallback.OnTrackSubscriptionFailed(trackSID, p)
117118
}()

room.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -870,6 +870,7 @@ func (r *Room) OnDisconnected(reason DisconnectionReason) {
870870
}
871871

872872
func (r *Room) OnRestarting() {
873+
r.log.Infow("room connection restarting")
873874
r.setConnectionState(ConnectionStateReconnecting)
874875
r.callback.OnReconnecting()
875876

@@ -897,11 +898,13 @@ func (r *Room) OnRestarted(
897898
}
898899

899900
func (r *Room) OnResuming() {
901+
r.log.Infow("room connection resuming")
900902
r.setConnectionState(ConnectionStateReconnecting)
901903
r.callback.OnReconnecting()
902904
}
903905

904906
func (r *Room) OnResumed() {
907+
r.log.Infow("room connection resumed")
905908
r.setConnectionState(ConnectionStateConnected)
906909
r.callback.OnReconnected()
907910
r.sendSyncState()

0 commit comments

Comments
 (0)