imagestore

package
v1.30.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 13, 2018 License: Apache-2.0 Imports: 23 Imported by: 20

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

This section is empty.

Variables

View Source
var (
	ErrKeyNotFound       = errors.New("no image IDs found")
	ErrDBUpdateNeedsRoot = errors.New("database schema needs to be updated, re-run as root to perform the update")
)
View Source
var (
	ErrRemoteNotFound = errors.New("remote target not found")
)

Functions

func RemoveACIInfo

func RemoveACIInfo(tx *sql.Tx, blobKey string) error

RemoveACIInfo removes the ACIInfo with the given blobKey.

func RemoveRemote

func RemoveRemote(tx *sql.Tx, blobKey string) error

RemoveRemote removes the remote with the given blobKey.

func WriteACIInfo

func WriteACIInfo(tx *sql.Tx, aciinfo *ACIInfo) error

WriteACIInfo adds or updates the provided aciinfo.

func WriteRemote

func WriteRemote(tx *sql.Tx, remote *Remote) error

WriteRemote adds or updates the provided Remote.

Types

type ACIFetchInfo

type ACIFetchInfo struct {
	// Latest defines if the ACI was imported using the latest pattern
	// (no version label was provided on ACI discovery).
	Latest bool
}

ACIFetchInfo is used to store information about the fetching process of an ACI.

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

func GetACIInfoWithBlobKey(tx *sql.Tx, blobKey string) (*ACIInfo, bool, error)

GetAciInfosWithBlobKey returns the ACIInfo with the given blobKey. found will be false if no aciinfo exists.

func GetACIInfosWithKeyPrefix

func GetACIInfosWithKeyPrefix(tx *sql.Tx, prefix string) ([]*ACIInfo, error)

GetAciInfosWithKeyPrefix returns all the ACIInfos with a blobkey starting with the given prefix.

func GetACIInfosWithName

func GetACIInfosWithName(tx *sql.Tx, name string) ([]*ACIInfo, bool, error)

GetAciInfosWithName returns all the ACIInfos for a given name. found will be false if no aciinfo exists.

func GetAllACIInfos

func GetAllACIInfos(tx *sql.Tx, sortfields []string, ascending bool) ([]*ACIInfo, error)

GetAllACIInfos returns all the ACIInfos sorted by optional sortfields and with ascending or descending order.

func NewACIInfo

func NewACIInfo(blobKey string, latest bool, t time.Time, size int64, treeStoreSize int64) *ACIInfo

type ACINotFoundError

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

func (e ACINotFoundError) Error() string

type Remote

type Remote struct {
	// ACIURL is the URL used to import an ACI.
	ACIURL string
	// SigURL is the URL used to import an ACI verification signature.
	SigURL string
	ETag   string
	// The key in the blob store under which the ACI has been saved.
	BlobKey      string
	CacheMaxAge  int
	DownloadTime time.Time
}

func GetAllRemotes

func GetAllRemotes(tx *sql.Tx) ([]*Remote, error)

GetAllRemotes returns all the ACIInfos sorted by optional sortfields and with ascending or descending order.

func GetRemote

func GetRemote(tx *sql.Tx, aciURL string) (*Remote, error)

GetRemote tries to retrieve a remote with the given aciURL. If remote doesn't exist, it returns ErrRemoteNotFound error.

func NewRemote

func NewRemote(aciurl, sigurl string) *Remote

type Store

type Store struct {
	// contains filtered or unexported fields
}

Store encapsulates a content-addressable-storage for storing ACIs on disk.

func NewStore

func NewStore(dir string) (*Store, error)

func (*Store) Close

func (s *Store) Close() error

Close closes a Store opened with NewStore().

func (*Store) Dump

func (s *Store) Dump(hex bool)

func (*Store) GetACI

func (s *Store) GetACI(name types.ACIdentifier, labels types.Labels) (string, error)

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

func (s *Store) GetACIInfoWithBlobKey(blobKey string) (*ACIInfo, error)

func (*Store) GetAllACIInfos

func (s *Store) GetAllACIInfos(sortfields []string, ascending bool) ([]*ACIInfo, error)

func (*Store) GetAllRemotes

func (s *Store) GetAllRemotes() ([]*Remote, error)

func (*Store) GetImageManifest

func (s *Store) GetImageManifest(key string) (*schema.ImageManifest, error)

GetImageManifest gets the ImageManifest with the specified key.

func (*Store) GetImageManifestJSON

func (s *Store) GetImageManifestJSON(key string) ([]byte, error)

GetImageManifestJSON gets the ImageManifest JSON bytes with the specified key.

func (*Store) GetRemote

func (s *Store) GetRemote(aciURL string) (*Remote, error)

GetRemote tries to retrieve a remote with the given ACIURL. If remote doesn't exist, it returns ErrRemoteNotFound error.

func (*Store) HasFullKey added in v1.13.0

func (s *Store) HasFullKey(key string) bool

HasFullKey returns whether the image with the given key exists on the disk by checking if the image manifest kv store contains the key.

func (*Store) HashToKey

func (s *Store) HashToKey(h hash.Hash) string

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

func (s *Store) RemoveACI(key string) error

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) ResolveKey

func (s *Store) ResolveKey(key string) (string, error)

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

func (s *Store) ResolveName(name string) ([]string, bool, error)

ResolveName resolves an image name to a list of full keys and using the store for resolution.

func (*Store) TmpDir

func (s *Store) TmpDir() (string, error)

TODO(sgotti), unexport this and provide other functions for external users TmpDir creates and returns dir local to the same filesystem as the Store, or any error encountered

func (*Store) TmpFile

func (s *Store) TmpFile() (*os.File, error)

TODO(sgotti), unexport this and provide other functions for external users TmpFile returns an *os.File local to the same filesystem as the Store, or any error encountered

func (Store) TmpNamedFile

func (s Store) TmpNamedFile(name string) (*os.File, error)

TODO(sgotti), unexport this and provide other functions for external users 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) UpdateTreeStoreSize

func (s *Store) UpdateTreeStoreSize(key string, newSize int64) error

TODO(sgotti) remove this when the treestore will save its images' sizes by itself

func (*Store) WriteACI

func (s *Store) WriteACI(r io.ReadSeeker, fetchInfo ACIFetchInfo) (string, error)

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

func (s *Store) WriteRemote(remote *Remote) error

WriteRemote adds or updates the provided Remote.

type StoreRemovalError

type StoreRemovalError struct {
	// contains filtered or unexported fields
}

StoreRemovalError defines an error removing a non transactional store (like a diskv 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

func (e *StoreRemovalError) Error() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL