From fe94a18bc292fe70020e4d59425d422076faebd6 Mon Sep 17 00:00:00 2001 From: Raja Subramanian Date: Mon, 20 Jan 2025 11:08:59 +0530 Subject: [PATCH] Do not seed if stream is already writable. (#3347) * Do not seed if stream is already writable. It is possible that in migration case, when the forwarder state is fetched from migrating out node and used to seed downtrack, it has already started due to the time it takes to get the state. Seeding in that state will reset things and cause large sequence number gaps potentially. * do not take lock --- pkg/sfu/downtrack.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/pkg/sfu/downtrack.go b/pkg/sfu/downtrack.go index abd06f04f..135363122 100644 --- a/pkg/sfu/downtrack.go +++ b/pkg/sfu/downtrack.go @@ -370,13 +370,17 @@ func NewDownTrack(params DowntrackParams) (*DownTrack, error) { d.rtpStats = rtpstats.NewRTPStatsSender(rtpstats.RTPStatsParams{ ClockRate: d.codec.ClockRate, - Logger: d.params.Logger, + Logger: d.params.Logger.WithValues( + "stream", "primary", + ), }, 4096) d.deltaStatsSenderSnapshotId = d.rtpStats.NewSenderSnapshotId() d.rtpStatsRTX = rtpstats.NewRTPStatsSender(rtpstats.RTPStatsParams{ ClockRate: d.codec.ClockRate, - Logger: d.params.Logger, + Logger: d.params.Logger.WithValues( + "stream", "rtx", + ), }, 1024) d.deltaStatsRTXSenderSnapshotId = d.rtpStatsRTX.NewSenderSnapshotId() @@ -1277,6 +1281,10 @@ func (d *DownTrack) GetState() DownTrackState { } func (d *DownTrack) SeedState(state DownTrackState) { + if d.writable.Load() { + return + } + if state.RTPStats != nil || state.ForwarderState != nil { d.params.Logger.Debugw("seeding down track state", "state", state) }