Documentation ¶
Overview ¶
Package cache implements both in-memory and on-disk caching.
Index ¶
- Variables
- type Cache
- func (d *Cache) Add(ctx context.Context, digest HexDigest, src io.Reader) error
- func (d *Cache) AddFileWithoutValidation(ctx context.Context, digest HexDigest, src string) error
- func (d *Cache) AddWithHardlink(ctx context.Context, digest HexDigest, src io.Reader, dest string, ...) error
- func (d *Cache) Added() []int64
- func (d *Cache) Close() error
- func (d *Cache) Evict(digest HexDigest)
- func (d *Cache) Hardlink(digest HexDigest, dest string, perm os.FileMode) error
- func (d *Cache) Keys() HexDigests
- func (d *Cache) Read(digest HexDigest) (io.ReadCloser, error)
- func (d *Cache) TotalSize() units.Size
- func (d *Cache) Touch(digest HexDigest) bool
- func (d *Cache) Used() []int64
- type HexDigest
- type HexDigests
- type Policies
Constants ¶
This section is empty.
Variables ¶
var ErrInvalidHash = errors.New("invalid hash")
ErrInvalidHash indicates invalid hash is specified.
Functions ¶
This section is empty.
Types ¶
type Cache ¶
type Cache struct {
// contains filtered or unexported fields
}
Cache is a cache of objects holding content in disk.
All implementations must be thread-safe.
func New ¶
New creates a disk based cache.
It may return both a valid Cache and an error if it failed to load the previous cache metadata. It is safe to ignore this error. This creates cache directory if it doesn't exist.
func (*Cache) AddFileWithoutValidation ¶
AddFileWithoutValidation adds src as cache entry with hardlink. But this doesn't do any content validation.
TODO(tikuta): make one function and control the behavior by option?
func (*Cache) AddWithHardlink ¶
func (d *Cache) AddWithHardlink(ctx context.Context, digest HexDigest, src io.Reader, dest string, perm os.FileMode) error
AddWithHardlink reads data from src and stores it in cache and hardlink file. This is to avoid file removal by shrink in Add().
func (*Cache) Hardlink ¶
Hardlink ensures file at |dest| has the same content as cached |digest|.
Note that the behavior when dest already exists is undefined. It will work on all POSIX and may or may not fail on Windows depending on the implementation used. Do not rely on this behavior.
func (*Cache) Keys ¶
func (d *Cache) Keys() HexDigests
Keys returns the list of all cached digests in LRU order.
func (*Cache) Read ¶
func (d *Cache) Read(digest HexDigest) (io.ReadCloser, error)
Read returns contents of the cached item.
type HexDigest ¶
type HexDigest string
HexDigest is the hash of a file that is hex-encoded. Only lower case letters are accepted.
type HexDigests ¶
type HexDigests []HexDigest
HexDigests is a slice of HexDigest that implements sort.Interface.
func (HexDigests) Len ¶
func (h HexDigests) Len() int
func (HexDigests) Less ¶
func (h HexDigests) Less(i, j int) bool
func (HexDigests) Swap ¶
func (h HexDigests) Swap(i, j int)
type Policies ¶
type Policies struct { // MaxSize trims if the cache gets larger than this value. If 0, the cache is // effectively a leak. MaxSize units.Size // MaxItems is the maximum number of items to keep in the cache. If 0, do not // enforce a limit. MaxItems int // MinFreeSpace trims if disk free space becomes lower than this value. // Only makes sense when using disk based cache. MinFreeSpace units.Size }
Policies is the policies to use on a cache to limit it's footprint.
It's a cache, not a leak.