37 lines
978 B
Go
37 lines
978 B
Go
package fscache
|
|
|
|
import "time"
|
|
|
|
// Reaper is used to control when streams expire from the cache.
|
|
// It is called once right after loading, and then it is run
|
|
// again after every Next() period of time.
|
|
type Reaper interface {
|
|
// Returns the amount of time to wait before the next scheduled Reaping.
|
|
Next() time.Duration
|
|
|
|
// Given a key and the last r/w times of a file, return true
|
|
// to remove the file from the cache, false to keep it.
|
|
Reap(key string, lastRead, lastWrite time.Time) bool
|
|
}
|
|
|
|
// NewReaper returns a simple reaper which runs every "period"
|
|
// and reaps files which are older than "expiry".
|
|
func NewReaper(expiry, period time.Duration) Reaper {
|
|
return &reaper{
|
|
expiry: expiry,
|
|
period: period,
|
|
}
|
|
}
|
|
|
|
type reaper struct {
|
|
period time.Duration
|
|
expiry time.Duration
|
|
}
|
|
|
|
func (g *reaper) Next() time.Duration {
|
|
return g.period
|
|
}
|
|
|
|
func (g *reaper) Reap(key string, lastRead, lastWrite time.Time) bool {
|
|
return lastRead.Before(time.Now().Add(-g.expiry))
|
|
}
|