12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- package worker
- import (
- "math"
- "time"
- "github.com/moby/buildkit/client"
- )
- const defaultCap int64 = 2e9 // 2GB
- // tempCachePercent represents the percentage ratio of the cache size in bytes to temporarily keep for a short period of time (couple of days)
- // over the total cache size in bytes. Because there is no perfect value, a mathematically pleasing one was chosen.
- // The value is approximately 13.8
- const tempCachePercent = math.E * math.Pi * math.Phi
- // DefaultGCPolicy returns a default builder GC policy
- func DefaultGCPolicy(p string, defaultKeepBytes int64) []client.PruneInfo {
- keep := defaultKeepBytes
- if defaultKeepBytes == 0 {
- keep = detectDefaultGCCap(p)
- }
- tempCacheKeepBytes := int64(math.Round(float64(keep) / 100. * float64(tempCachePercent)))
- const minTempCacheKeepBytes = 512 * 1e6 // 512MB
- if tempCacheKeepBytes < minTempCacheKeepBytes {
- tempCacheKeepBytes = minTempCacheKeepBytes
- }
- return []client.PruneInfo{
- // if build cache uses more than 512MB delete the most easily reproducible data after it has not been used for 2 days
- {
- Filter: []string{"type==source.local,type==exec.cachemount,type==source.git.checkout"},
- KeepDuration: 48 * time.Hour,
- KeepBytes: tempCacheKeepBytes,
- },
- // remove any data not used for 60 days
- {
- KeepDuration: 60 * 24 * time.Hour,
- KeepBytes: keep,
- },
- // keep the unshared build cache under cap
- {
- KeepBytes: keep,
- },
- // if previous policies were insufficient start deleting internal data to keep build cache under cap
- {
- All: true,
- KeepBytes: keep,
- },
- }
- }
|