Use a TTL of 1 hour for ICE config cache (#873)

This commit is contained in:
Raja Subramanian
2022-08-05 17:31:28 +05:30
committed by GitHub
parent 3f16018b62
commit c75090a0fe
+19 -9
View File
@@ -25,8 +25,14 @@ const (
roomPurgeSeconds = 24 * 60 * 60
tokenRefreshInterval = 5 * time.Minute
tokenDefaultTTL = 10 * time.Minute
iceConfigTTL = 60 * time.Minute
)
type iceConfigCacheEntry struct {
iceConfig types.IceConfig
modifiedAt time.Time
}
// RoomManager manages rooms and its interaction with participants.
// It's responsible for creating, deleting rooms, as well as running sessions for participants
type RoomManager struct {
@@ -42,7 +48,7 @@ type RoomManager struct {
rooms map[livekit.RoomName]*rtc.Room
iceConfigCache map[livekit.ParticipantIdentity]types.IceConfig
iceConfigCache map[livekit.ParticipantIdentity]*iceConfigCacheEntry
}
func NewLocalRoomManager(
@@ -70,7 +76,7 @@ func NewLocalRoomManager(
rooms: make(map[livekit.RoomName]*rtc.Room),
iceConfigCache: make(map[livekit.ParticipantIdentity]types.IceConfig),
iceConfigCache: make(map[livekit.ParticipantIdentity]*iceConfigCacheEntry),
}
// hook up to router
@@ -317,7 +323,10 @@ func (r *RoomManager) StartSession(
})
participant.OnICEConfigChanged(func(participant types.LocalParticipant, iceConfig types.IceConfig) {
r.lock.Lock()
r.iceConfigCache[participant.Identity()] = iceConfig
r.iceConfigCache[participant.Identity()] = &iceConfigCacheEntry{
iceConfig: iceConfig,
modifiedAt: time.Now(),
}
r.lock.Unlock()
})
@@ -629,15 +638,16 @@ func (r *RoomManager) refreshToken(participant types.LocalParticipant) error {
}
func (r *RoomManager) setIceConfig(participant types.LocalParticipant) {
r.lock.RLock()
iceConfig, ok := r.iceConfigCache[participant.Identity()]
if !ok {
r.lock.RUnlock()
r.lock.Lock()
iceConfigCacheEntry, ok := r.iceConfigCache[participant.Identity()]
if !ok || time.Since(iceConfigCacheEntry.modifiedAt) > iceConfigTTL {
delete(r.iceConfigCache, participant.Identity())
r.lock.Unlock()
return
}
r.lock.RUnlock()
r.lock.Unlock()
participant.SetICEConfig(iceConfig)
participant.SetICEConfig(iceConfigCacheEntry.iceConfig)
}
// ------------------------------------