diff --git a/session/session.go b/session/session.go index 7ce2c78..3a8f96f 100644 --- a/session/session.go +++ b/session/session.go @@ -759,6 +759,13 @@ func (s *Manager) restoreAllSessions() { if err != nil { return } + + // Load all persisted session JSONs (fast, sequential disk reads) + type loadedSession struct { + ps *agent.PersistedSession + name string + } + var loaded []loadedSession for _, e := range entries { if !strings.HasSuffix(e.Name(), ".json") { continue @@ -769,13 +776,25 @@ func (s *Manager) restoreAllSessions() { s.cfg.Log.Error("restore session %s: %v", e.Name(), err) continue } - if err := s.restoreSession(ps); err != nil { - s.cfg.Log.Error("restore session %s: %v", ps.ID, err) - continue - } - // Keep active snapshots until the session is explicitly killed. - // Shutdown refreshes these files with the latest state. + loaded = append(loaded, loadedSession{ps: ps, name: e.Name()}) } + + if len(loaded) == 0 { + return + } + + // Restore sessions in parallel + var wg sync.WaitGroup + for _, ls := range loaded { + wg.Add(1) + go func(ls loadedSession) { + defer wg.Done() + if err := s.restoreSession(ls.ps); err != nil { + s.cfg.Log.Error("restore session %s: %v", ls.ps.ID, err) + } + }(ls) + } + wg.Wait() } func (s *Manager) restoreSession(ps *agent.PersistedSession) error {