Documentation ¶
Overview ¶
Package store implements a content-addressable-store on disk. It leverages the `diskv` package to store items in a simple key-value blob store: https://github.com/peterbourgon/diskv
Index ¶
- Constants
- Variables
- func FileInfoFromHeader(hdr *tar.Header) *fileInfo
- func NewHashWriter(w io.Writer) specaci.ArchiveWriter
- func RemoveACIInfo(tx *sql.Tx, blobKey string) error
- func RemoveRemote(tx *sql.Tx, blobKey string) error
- func WriteACIInfo(tx *sql.Tx, aciinfo *ACIInfo) error
- func WriteRemote(tx *sql.Tx, remote *Remote) error
- type ACIInfo
- func GetACIInfoWithBlobKey(tx *sql.Tx, blobKey string) (*ACIInfo, bool, error)
- func GetACIInfosWithKeyPrefix(tx *sql.Tx, prefix string) ([]*ACIInfo, error)
- func GetACIInfosWithName(tx *sql.Tx, name string) ([]*ACIInfo, bool, error)
- func GetAllACIInfos(tx *sql.Tx, sortfields []string, ascending bool) ([]*ACIInfo, error)
- func NewACIInfo(blobKey string, latest bool, t time.Time, size int64, treeStoreSize int64) *ACIInfo
- type ACINotFoundError
- type DB
- type Remote
- type Store
- func (s *Store) CheckTreeStore(id string) (string, error)
- func (s *Store) Close() error
- func (s *Store) Dump(hex bool)
- func (s *Store) GetACI(name types.ACIdentifier, labels types.Labels) (string, error)
- func (s *Store) GetACIInfoWithBlobKey(blobKey string) (*ACIInfo, error)
- func (s *Store) GetAllACIInfos(sortfields []string, ascending bool) ([]*ACIInfo, error)
- func (s *Store) GetImageManifest(key string) (*schema.ImageManifest, error)
- func (s *Store) GetImageManifestJSON(key string) ([]byte, error)
- func (s *Store) GetRemote(aciURL string) (*Remote, bool, error)
- func (s *Store) GetTreeStoreID(key string) (string, error)
- func (s *Store) GetTreeStoreIDs() ([]string, error)
- func (s *Store) GetTreeStorePath(id string) string
- func (s *Store) GetTreeStoreRootFS(id string) string
- func (s *Store) HashToKey(h hash.Hash) string
- func (s *Store) ReadStream(key string) (io.ReadCloser, error)
- func (s *Store) RemoveACI(key string) error
- func (s *Store) RemoveTreeStore(id string) error
- func (s *Store) RenderTreeStore(key string, rebuild bool) (id string, hash string, err error)
- func (s *Store) ResolveKey(key string) (string, error)
- func (s *Store) ResolveName(name string) ([]string, bool, error)
- func (s *Store) TmpDir() (string, error)
- func (s *Store) TmpFile() (*os.File, error)
- func (s Store) TmpNamedFile(name string) (*os.File, error)
- func (s *Store) UpdateSize(key string, newSize int64) error
- func (s *Store) UpdateTreeStoreSize(key string, newSize int64) error
- func (s *Store) WriteACI(r io.ReadSeeker, latest bool) (string, error)
- func (s *Store) WriteRemote(remote *Remote) error
- type StoreRemovalError
- type TreeStore
- func (ts *TreeStore) Check(id string) (string, error)
- func (ts *TreeStore) GetImageHash(id string) (string, error)
- func (ts *TreeStore) GetPath(id string) string
- func (ts *TreeStore) GetRootFS(id string) string
- func (ts *TreeStore) Hash(id string) (string, error)
- func (ts *TreeStore) IsRendered(id string) (bool, error)
- func (ts *TreeStore) Remove(id string, s *Store) error
- func (ts *TreeStore) Size(id string) (int64, error)
- func (ts *TreeStore) Write(id string, key string, s *Store) (string, error)
Constants ¶
const (
DbFilename = "ql.db"
)
Variables ¶
var (
ErrKeyNotFound = errors.New("no image IDs found")
)
Functions ¶
func FileInfoFromHeader ¶
func NewHashWriter ¶
func NewHashWriter(w io.Writer) specaci.ArchiveWriter
func RemoveACIInfo ¶ added in v0.5.5
RemoveACIInfo removes the ACIInfo with the given blobKey.
func RemoveRemote ¶ added in v0.5.5
RemoveRemote removes the remote with the given blobKey.
func WriteACIInfo ¶
WriteACIInfo adds or updates the provided aciinfo.
Types ¶
type ACIInfo ¶
type ACIInfo struct { // BlobKey is the key in the blob/imageManifest store of the related // ACI file and is the db primary key. BlobKey string // Name is the name of the ACI. Name string // ImportTime is the time this ACI was imported in the store. ImportTime time.Time // LastUsed is the last time this image was read LastUsed time.Time // Size is the size in bytes of this image in the store Size int64 // TreeStoreSize is the size in bytes of this image in the tree store TreeStoreSize int64 // Latest defines if the ACI was imported using the latest pattern (no // version label was provided on ACI discovery) Latest bool }
ACIInfo is used to store information about an ACI.
func GetACIInfoWithBlobKey ¶ added in v0.5.5
GetAciInfosWithBlobKey returns the ACIInfo with the given blobKey. found will be false if no aciinfo exists.
func GetACIInfosWithKeyPrefix ¶
GetAciInfosWithKeyPrefix returns all the ACIInfos with a blobkey starting with the given prefix.
func GetACIInfosWithName ¶ added in v0.8.1
GetAciInfosWithName returns all the ACIInfos for a given name. found will be false if no aciinfo exists.
func GetAllACIInfos ¶ added in v0.5.5
GetAllACIInfos returns all the ACIInfos sorted by optional sortfields and with ascending or descending order.
type ACINotFoundError ¶ added in v0.9.0
type ACINotFoundError struct {
// contains filtered or unexported fields
}
ACINotFoundError is returned when an ACI cannot be found by GetACI Useful to distinguish a generic error from an aci not found.
func (ACINotFoundError) Error ¶ added in v0.9.0
func (e ACINotFoundError) Error() string
type DB ¶
type DB struct {
// contains filtered or unexported fields
}
type Remote ¶
type Remote struct { ACIURL string SigURL string ETag string // The key in the blob store under which the ACI has been saved. BlobKey string CacheMaxAge int DownloadTime time.Time }
type Store ¶
type Store struct {
// contains filtered or unexported fields
}
Store encapsulates a content-addressable-storage for storing ACIs on disk.
func (*Store) CheckTreeStore ¶
CheckTreeStore verifies the treestore consistency for the specified id.
func (*Store) GetACI ¶
GetACI retrieves the ACI that best matches the provided app name and labels. The returned value is the blob store key of the retrieved ACI. If there are multiple matching ACIs choose the latest one (defined as the last one imported in the store). If no version label is requested, ACIs marked as latest in the ACIInfo are preferred.
func (*Store) GetACIInfoWithBlobKey ¶ added in v0.10.0
func (*Store) GetAllACIInfos ¶ added in v0.5.5
func (*Store) GetImageManifest ¶
func (s *Store) GetImageManifest(key string) (*schema.ImageManifest, error)
GetImageManifest gets the ImageManifest with the specified key.
func (*Store) GetImageManifestJSON ¶ added in v0.9.0
GetImageManifestJSON gets the ImageManifest JSON bytes with the specified key.
func (*Store) GetRemote ¶
GetRemote tries to retrieve a remote with the given ACIURL. found will be false if remote doesn't exist.
func (*Store) GetTreeStoreID ¶ added in v0.9.0
GetTreeStoreID calculates the treestore ID for the given image key. The treeStoreID is computed as an hash of the flattened dependency tree image keys. In this way the ID may change for the same key if the image's dependencies change.
func (*Store) GetTreeStoreIDs ¶ added in v0.9.0
GetTreeStoreIDs returns a slice containing all the treeStore's IDs available (both fully or partially rendered).
func (*Store) GetTreeStorePath ¶
GetTreeStorePath returns the absolute path of the treestore for the specified id. It doesn't ensure that the path exists and is fully rendered. This should be done calling IsRendered()
func (*Store) GetTreeStoreRootFS ¶
GetTreeStoreRootFS returns the absolute path of the rootfs in the treestore for specified id. It doesn't ensure that the rootfs exists and is fully rendered. This should be done calling IsRendered()
func (*Store) HashToKey ¶
HashToKey takes a hash.Hash (which currently _MUST_ represent a full SHA512), calculates its sum, and returns a string which should be used as the key to store the data matching the hash.
func (*Store) ReadStream ¶
func (s *Store) ReadStream(key string) (io.ReadCloser, error)
func (*Store) RemoveACI ¶ added in v0.5.5
RemoveACI removes the ACI with the given key. It firstly removes the aci infos inside the db, then it tries to remove the non transactional data. If some error occurs removing some non transactional data a StoreRemovalError is returned.
func (*Store) RemoveTreeStore ¶ added in v0.5.5
RemoveTreeStore removes the rendered image in tree store with the given id.
func (*Store) RenderTreeStore ¶
RenderTreeStore renders a treestore for the given image key if it's not already fully rendered. Users of treestore should call s.RenderTreeStore before using it to ensure that the treestore is completely rendered. Returns the id and hash of the rendered treestore if it is newly rendered, and only the id if it is already rendered.
func (*Store) ResolveKey ¶
ResolveKey resolves a partial key (of format `sha512-0c45e8c0ab2`) to a full key by considering the key a prefix and using the store for resolution. If the key is longer than the full key length, it is first truncated.
func (*Store) ResolveName ¶ added in v0.15.0
ResolveName resolves an image name to a list of full keys and using the store for resolution.
func (*Store) TmpDir ¶
TmpDir creates and returns dir local to the same filesystem as the Store, or any error encountered
func (*Store) TmpFile ¶
TmpFile returns an *os.File local to the same filesystem as the Store, or any error encountered
func (Store) TmpNamedFile ¶ added in v0.11.0
TmpNamedFile returns an *os.File with the specified name local to the same filesystem as the Store, or any error encountered. If the file already exists it will return the existing file in read/write mode with the cursor at the end of the file.
func (*Store) UpdateSize ¶ added in v0.14.0
func (*Store) UpdateTreeStoreSize ¶ added in v0.14.0
func (*Store) WriteACI ¶
WriteACI takes an ACI encapsulated in an io.Reader, decompresses it if necessary, and then stores it in the store under a key based on the image ID (i.e. the hash of the uncompressed ACI) latest defines if the aci has to be marked as the latest. For example an ACI discovered without asking for a specific version (latest pattern).
func (*Store) WriteRemote ¶
WriteRemote adds or updates the provided Remote.
type StoreRemovalError ¶ added in v0.5.5
type StoreRemovalError struct {
// contains filtered or unexported fields
}
StoreRemovalError defines an error removing a non transactional store (like a diskv store or the tree store). When this happen there's the possibility that the store is left in an unclean state (for example with some stale files).
func (*StoreRemovalError) Error ¶ added in v0.5.5
func (e *StoreRemovalError) Error() string
type TreeStore ¶
type TreeStore struct {
// contains filtered or unexported fields
}
TreeStore represents a store of rendered ACIs
func (*TreeStore) Check ¶
Check calculates the actual rendered ACI's hash and verifies that it matches the saved value. Returns the calculated hash.
func (*TreeStore) GetImageHash ¶ added in v0.14.0
GetImageHash returns the hash of the image that uses the tree store identified by id.
func (*TreeStore) GetPath ¶
GetPath returns the absolute path of the treestore for the provided id. It doesn't ensure that the path exists and is fully rendered. This should be done calling IsRendered()
func (*TreeStore) GetRootFS ¶
GetRootFS returns the absolute path of the rootfs for the provided id. It doesn't ensure that the rootfs exists and is fully rendered. This should be done calling IsRendered()
func (*TreeStore) Hash ¶
Hash calculates an hash of the rendered ACI. It uses the same functions used to create a tar but instead of writing the full archive is just computes the sha512 sum of the file infos and contents.
func (*TreeStore) IsRendered ¶
IsRendered checks if the tree store with the provided id is fully rendered
func (*TreeStore) Size ¶ added in v0.14.0
Size returns the size of the rootfs for the provided id. It is a relatively expensive operation, it goes through all the files and adds up their size.
func (*TreeStore) Write ¶
Write renders the ACI with the provided key in the treestore. id references that specific tree store rendered image. Write, to avoid having a rendered ACI with old stale files, requires that the destination directory doesn't exist (usually Remove should be called before Write)