Skip to content

Commit f48a4a3

Browse files
committed
Add periodic session refresh for Live Video to Video
1 parent 232df3a commit f48a4a3

File tree

1 file changed

+32
-1
lines changed

1 file changed

+32
-1
lines changed

server/ai_session.go

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,9 +204,32 @@ func NewAISessionSelector(ctx context.Context, cap core.Capability, modelID stri
204204
return nil, err
205205
}
206206

207+
// Periodically refresh sessions for Live Video to Video in order to minimize the necessity of refreshing sessions
208+
// when the AI process is started
209+
if cap == core.Capability_LiveVideoToVideo {
210+
startPeriodicRefresh(sel)
211+
}
212+
207213
return sel, nil
208214
}
209215

216+
func startPeriodicRefresh(sel *AISessionSelector) {
217+
go func() {
218+
// Refresh and 80% or tll to avoid ever getting ttl applied
219+
refreshInterval := time.Duration(0.8 * float64(sel.ttl))
220+
ticker := time.NewTicker(refreshInterval)
221+
defer ticker.Stop()
222+
for {
223+
select {
224+
case <-ticker.C:
225+
if err := sel.Refresh(context.Background()); err != nil {
226+
clog.Infof(context.Background(), "Error refreshing AISessionSelector err=%v", err)
227+
}
228+
}
229+
}
230+
}()
231+
}
232+
210233
// newAICapabilities creates a new capabilities object with
211234
func newAICapabilities(cap core.Capability, modelID string, warm bool, minVersion string) *core.Capabilities {
212235
aiCaps := []core.Capability{cap}
@@ -232,6 +255,11 @@ func (sel *AISessionSelector) SelectorIsEmpty() bool {
232255

233256
func (sel *AISessionSelector) Select(ctx context.Context) *AISession {
234257
shouldRefreshSelector := func() bool {
258+
sel.warmPool.mu.Lock()
259+
sel.coldPool.mu.Lock()
260+
261+
defer sel.coldPool.mu.Unlock()
262+
defer sel.warmPool.mu.Unlock()
235263
discoveryPoolSize := int(math.Min(float64(sel.node.OrchestratorPool.Size()), float64(sel.initialPoolSize)))
236264

237265
// If the selector is empty, release all orchestrators from suspension and
@@ -332,10 +360,13 @@ func (sel *AISessionSelector) Refresh(ctx context.Context) error {
332360
}
333361
}
334362

363+
sel.warmPool.mu.Lock()
364+
sel.coldPool.mu.Lock()
365+
defer sel.coldPool.mu.Unlock()
366+
defer sel.warmPool.mu.Unlock()
335367
sel.warmPool.Add(warmSessions)
336368
sel.coldPool.Add(coldSessions)
337369
sel.initialPoolSize = len(warmSessions) + len(coldSessions) + len(sel.suspender.list)
338-
339370
sel.lastRefreshTime = time.Now()
340371

341372
return nil

0 commit comments

Comments
 (0)