fix(pier): reap stateful sessions whose store record expired
- a reaper started at Mount checks every local session against the store every min(idle_ttl/2, 1m) and closes each copy whose record is gone, logging the expired step (A-CR-01, A-IN-06) - the GET stream re-check ends the stream when the record is gone (A-IN-01) - tool calls served without a session on the stateful path log the session as ephemeral (A-IN-06) - TestPierReaperSmoke and the ReapNow, LocalSessions, StopReaper seams
This commit is contained in:
@@ -49,3 +49,21 @@ func (p *Pier) StatelessServers() int {
|
||||
|
||||
// SetRecheck sets how often a long GET stream re-verifies its bearer.
|
||||
func (p *Pier) SetRecheck(d time.Duration) { p.recheck = d }
|
||||
|
||||
// ReapNow runs one session reaper pass and answers how many local sessions
|
||||
// it closed.
|
||||
func (p *Pier) ReapNow(ctx context.Context) int { return p.sessions.reapOnce(ctx) }
|
||||
|
||||
// LocalSessions counts the stateful sessions connected on this instance.
|
||||
func (p *Pier) LocalSessions() int {
|
||||
p.sessions.mu.Lock()
|
||||
defer p.sessions.mu.Unlock()
|
||||
return len(p.sessions.local)
|
||||
}
|
||||
|
||||
// StopReaper ends the session reaper goroutine Mount started.
|
||||
func (p *Pier) StopReaper() {
|
||||
if p.stopReap != nil {
|
||||
p.stopReap()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user