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 GetACIInfosWithAppName(tx *sql.Tx, appname string) ([]*ACIInfo, bool, error)
- func GetACIInfosWithKeyPrefix(tx *sql.Tx, prefix string) ([]*ACIInfo, error)
- func GetAllACIInfos(tx *sql.Tx, sortfields []string, ascending bool) ([]*ACIInfo, error)
- func NewACIInfo(blobKey string, latest bool, t time.Time) *ACIInfo
- type DB
- type Remote
- type Store
- func (s Store) CheckTreeStore(key string) error
- func (s Store) Dump(hex bool)
- func (s Store) GetACI(name types.ACName, labels types.Labels) (string, error)
- func (ds Store) GetAllACIInfos(sortfields []string, ascending bool) ([]*ACIInfo, error)
- func (s Store) GetImageManifest(key string) (*schema.ImageManifest, error)
- func (s Store) GetRemote(aciURL string) (*Remote, bool, error)
- func (s Store) GetTreeStorePath(key string) string
- func (s Store) GetTreeStoreRootFS(key string) string
- func (s Store) HashToKey(h hash.Hash) string
- func (s Store) ReadStream(key string) (io.ReadCloser, error)
- func (ds Store) RemoveACI(key string) error
- func (ds Store) RemoveTreeStore(key string) error
- func (s Store) RenderTreeStore(key string, rebuild bool) error
- func (s Store) ResolveKey(key string) (string, error)
- func (s Store) TmpDir() (string, error)
- func (s Store) TmpFile() (*os.File, error)
- func (s Store) WriteACI(r io.Reader, latest bool) (string, error)
- func (s Store) WriteRemote(remote *Remote) error
- type StoreRemovalError
- type TreeStore
- func (ts *TreeStore) Check(key string) error
- func (ts *TreeStore) GetPath(key string) string
- func (ts *TreeStore) GetRootFS(key string) string
- func (ts *TreeStore) Hash(key string) (string, error)
- func (ts *TreeStore) IsRendered(key string) (bool, error)
- func (ts *TreeStore) Remove(key string) error
- func (ts *TreeStore) Write(key string, s *Store) error
Constants ¶
const (
DbFilename = "ql.db"
)
Variables ¶
var (
ErrKeyNotFound = errors.New("no keys 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 // AppName is the app name provided by the ACI. AppName string // ImportTime is the time this ACI was imported in the store. ImportTime time.Time // 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 GetACIInfosWithAppName ¶
GetAciInfosWithAppName returns all the ACIInfos for a given appname. found will be false if no aciinfo exists.
func GetACIInfosWithKeyPrefix ¶
GetAciInfosWithKeyPrefix returns all the ACIInfos with a blobkey starting with the given prefix.
func GetAllACIInfos ¶ added in v0.5.5
GetAllACIInfos returns all the ACIInfos sorted by optional sortfields and with ascending or descending order.
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 }
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 key.
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) GetAllACIInfos ¶ added in v0.5.5
func (Store) GetImageManifest ¶
func (s Store) GetImageManifest(key string) (*schema.ImageManifest, error)
Get the ImageManifest 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) GetTreeStorePath ¶
GetTreeStorePath returns the absolute path of the treestore for the specified key. 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 key. 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 key.
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.
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) 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) 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 The image's key becomes the name of the directory containing the rendered aci.
func (*TreeStore) Check ¶
Check calculates the actual rendered ACI's hash and verifies that it matches the saved value.
func (*TreeStore) GetPath ¶
GetPath returns the absolute path of the treestore for the specified key. 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 specified key. It doesn't ensure that the rootfs exists and is fully rendered. This should be done calling IsRendered()
func (*TreeStore) Hash ¶
TreeStore 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 is fully rendered