update protocol (#2593)

* update protocol

* cleanup

* deps
This commit is contained in:
Paul Wells authored and GitHub committed 2024-03-21 02:48:26 -07:00
1 parent 7945c01dbe
commit 0f597e7e46
8 files changed
+28 -24

No files matched your search

+13 -9
View File
@@ -265,7 +265,7 @@ func NewParticipant(params ParticipantParams) (*ParticipantImpl, error) {
}
p.closeReason.Store(types.ParticipantCloseReasonNone)
p.version.Store(params.InitialVersion)
p.timedVersion.Update(params.VersionGenerator.New())
p.timedVersion.Update(params.VersionGenerator.Next())
p.migrateState.Store(types.MigrateStateInit)
p.state.Store(livekit.ParticipantInfo_JOINING)
p.grants = params.Grants
@@ -495,16 +495,20 @@ func (p *ParticipantImpl) CanSkipBroadcast() bool {
}
func (p *ParticipantImpl) ToProtoWithVersion() (*livekit.ParticipantInfo, utils.TimedVersion) {
v := p.version.Load()
piv := p.timedVersion.Load()
if p.dirty.Swap(false) {
v = p.version.Inc()
piv = p.params.VersionGenerator.Next()
p.timedVersion.Update(&piv)
if p.dirty.Load() {
p.lock.Lock()
if p.dirty.Swap(false) {
p.version.Inc()
p.timedVersion.Update(p.params.VersionGenerator.Next())
}
p.lock.Unlock()
}
grants := p.ClaimGrants()
p.lock.RLock()
v := p.version.Load()
piv := p.timedVersion
pi := &livekit.ParticipantInfo{
Sid: string(p.params.SID),
Identity: string(p.params.Identity),
@@ -1988,9 +1992,9 @@ func (p *ParticipantImpl) mediaTrackReceived(track *webrtc.TrackRemote, rtpRecei
}
ti.MimeType = track.Codec().MimeType
if utils.NewTimedVersionFromProto(ti.Version).IsZero() {
if utils.TimedVersionFromProto(ti.Version).IsZero() {
// only assign version on a fresh publish, i. e. avoid updating version in scenarios like migration
ti.Version = p.params.VersionGenerator.New().ToProto()
ti.Version = p.params.VersionGenerator.Next().ToProto()
}
mt = p.addMediaTrack(signalCid, track.ID(), ti)
newTrack = true
+1 -1
View File
@@ -710,7 +710,7 @@ func (r *Room) SyncState(participant types.LocalParticipant, state *livekit.Sync
}
func (r *Room) UpdateSubscriptionPermission(participant types.LocalParticipant, subscriptionPermission *livekit.SubscriptionPermission) error {
if err := participant.UpdateSubscriptionPermission(subscriptionPermission, utils.TimedVersion{}, r.GetParticipantByID); err != nil {
if err := participant.UpdateSubscriptionPermission(subscriptionPermission, utils.TimedVersion(0), r.GetParticipantByID); err != nil {
return err
}
for _, track := range participant.GetPublishedTracks() {
+3 -3
View File
@@ -56,7 +56,7 @@ type SubscribedTrack struct {
versionGenerator utils.TimedVersionGenerator
settingsLock sync.Mutex
settings *livekit.UpdateTrackSettings
settingsVersion *utils.TimedVersion
settingsVersion utils.TimedVersion
bindLock sync.Mutex
bound bool
@@ -243,7 +243,7 @@ func (t *SubscribedTrack) applySettings() {
}
t.logger.Debugw("updating subscriber track settings", "settings", logger.Proto(t.settings))
t.settingsVersion = t.versionGenerator.New()
t.settingsVersion = t.versionGenerator.Next()
settingsVersion := t.settingsVersion
t.settingsLock.Unlock()
@@ -264,7 +264,7 @@ func (t *SubscribedTrack) applySettings() {
}
t.settingsLock.Lock()
if settingsVersion.Compare(t.settingsVersion) != 0 {
if settingsVersion != t.settingsVersion {
// a newer settings has superceded this one
t.settingsLock.Unlock()
return
+1 -1
View File
@@ -45,7 +45,7 @@ func NewMockParticipant(identity livekit.ParticipantIdentity, protocol types.Pro
Identity: string(identity),
State: livekit.ParticipantInfo_JOINED,
IsPublisher: publisher,
}, utils.TimedVersion{})
}, utils.TimedVersion(0))
p.SetMetadataCalls(func(m string) {
var f func(participant types.LocalParticipant)
+5 -5
View File
@@ -166,7 +166,7 @@ func (u *UpTrackManager) UpdateSubscriptionPermission(
// we do not want to initialize subscriptionPermissionVersion too early since if another machine is the
// owner for the data, we'd prefer to use their TimedVersion
// ignore older version
if !timedVersion.After(&u.subscriptionPermissionVersion) {
if !timedVersion.After(u.subscriptionPermissionVersion) {
u.params.Logger.Debugw(
"skipping older subscription permission version",
"existingValue", logger.Proto(u.subscriptionPermission),
@@ -177,10 +177,10 @@ func (u *UpTrackManager) UpdateSubscriptionPermission(
u.lock.Unlock()
return nil
}
u.subscriptionPermissionVersion.Update(&timedVersion)
u.subscriptionPermissionVersion.Update(timedVersion)
} else {
// for requests coming from the current node, use local versions
u.subscriptionPermissionVersion.Update(u.params.VersionGenerator.New())
u.subscriptionPermissionVersion.Update(u.params.VersionGenerator.Next())
}
// store as is for use when migrating
@@ -188,7 +188,7 @@ func (u *UpTrackManager) UpdateSubscriptionPermission(
if subscriptionPermission == nil {
u.params.Logger.Debugw(
"updating subscription permission, setting to nil",
"version", &u.subscriptionPermissionVersion,
"version", u.subscriptionPermissionVersion,
)
// possible to get a nil when migrating
u.lock.Unlock()
@@ -198,7 +198,7 @@ func (u *UpTrackManager) UpdateSubscriptionPermission(
u.params.Logger.Debugw(
"updating subscription permission",
"permissions", logger.Proto(u.subscriptionPermission),
"version", &u.subscriptionPermissionVersion,
"version", u.subscriptionPermissionVersion,
)
if err := u.parseSubscriptionPermissionsLocked(subscriptionPermission, func(pID livekit.ParticipantID) types.LocalParticipant {
u.lock.Unlock()
+2 -2
View File
@@ -211,8 +211,8 @@ func TestUpdateSubscriptionPermission(t *testing.T) {
um.UpdateSubscriptionPermission(&livekit.SubscriptionPermission{}, v0, nil)
require.Equal(t, v2.Load(), um.subscriptionPermissionVersion.Load(), "out of order updates should be ignored")
um.UpdateSubscriptionPermission(&livekit.SubscriptionPermission{}, utils.TimedVersion{}, nil)
require.True(t, um.subscriptionPermissionVersion.After(&v2), "zero version in updates should use next local version")
um.UpdateSubscriptionPermission(&livekit.SubscriptionPermission{}, utils.TimedVersion(0), nil)
require.True(t, um.subscriptionPermissionVersion.After(v2), "zero version in updates should use next local version")
})
}