internal/responsecache/vecstore_cleanup.go
Rama main · réplica de lectura del repositorio original.
package responsecache
import (
"context"
"log/slog"
"sync"
"time"
)
const vecStoreCleanupInterval = time.Hour
type vecCleanup struct {
cancel context.CancelFunc
wg sync.WaitGroup
}
func startVecCleanup(store VecStore) *vecCleanup {
ctx, cancel := context.WithCancel(context.Background())
c := &vecCleanup{cancel: cancel}
c.wg.Go(func() {
t := time.NewTicker(vecStoreCleanupInterval)
defer t.Stop()
for {
select {
case <-t.C:
if err := store.DeleteExpired(ctx); err != nil {
if ctx.Err() != nil {
return
}
slog.Warn("vecstore: delete expired", "err", err)
}
case <-ctx.Done():
return
}
}
})
return c
}
func (c *vecCleanup) close() {
if c == nil {
return
}
c.cancel()
c.wg.Wait()
}