mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-12-12 03:26:30 +00:00
38 lines
978 B
Go
38 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))
|
||
|
}
|