pkg/files/store/interface.go (22 lines of code) (raw):
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
package store
import (
"time"
"github.com/azure/peerd/pkg/context"
"github.com/opencontainers/go-digest"
)
// FilesStore describes a store for files.
type FilesStore interface {
// Key tries to find the cache key for the requested content or returns empty.
Key(c context.Context) (key string, d digest.Digest, err error)
// Open opens the requested file and starts prefetching it. It also returns the size of the file.
Open(c context.Context) (File, error)
// Subscribe returns a channel that will be notified when a blob is added to the store.
Subscribe() chan string
}
// File is an abstraction for a file that can be read from this store.
// It is similar to os.File.
type File interface {
// Seek sets the current file offset.
Seek(offset int64, whence int) (int64, error)
// Fstat returns the size of the file.
Fstat() (int64, error)
// Read reads up to len(p) bytes into p. It returns the number of bytes read (0 <= n <= len(p)) and any error encountered.
Read(p []byte) (n int, err error)
// ReadAt reads len(p) bytes from the File starting at byte offset off. It returns the number of bytes read and the error, if any.
ReadAt(buff []byte, off int64) (int, error)
}
var (
// PrefetchWorkers is the number of workers that will be used to prefetch files.
// To disable prefetch, set this to 0.
PrefetchWorkers = 50
// ResolveRetries is the number of times to attempt resolving a key before giving up.
ResolveRetries = 3
// ResolveTimeout is the timeout for resolving a key.
ResolveTimeout = 20 * time.Millisecond
)