Documentation
      ¶
    
    
  
    
      Overview ¶
Package layer is package for managing read-only and read-write mounts on the union file system driver. Read-only mounts are referenced using a content hash and are protected from mutation in the exposed interface. The tar format is used to create read-only layers and export both read-only and writable layers. The exported tar data for a read-only layer should match the tar used to create the layer.
Index ¶
- Constants
 - Variables
 - func IsEmpty(diffID DiffID) bool
 - func LogReleaseMetadata(metadatas []Metadata)
 - func ReleaseAndLog(ls Store, l Layer)
 - type ChainID
 - type CreateRWLayerOpts
 - type DescribableStore
 - type DiffID
 - type Layer
 - type Metadata
 - type MountInit
 - type RWLayer
 - type Store
 - type StoreOptions
 - type TarStreamer
 
Constants ¶
const DigestSHA256EmptyTar = DiffID("sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef")
    DigestSHA256EmptyTar is the canonical sha256 digest of empty tar file - (1024 NULL bytes)
Variables ¶
var ( // ErrLayerDoesNotExist is used when an operation is // attempted on a layer which does not exist. ErrLayerDoesNotExist = errors.New("layer does not exist") // ErrLayerNotRetained is used when a release is // attempted on a layer which is not retained. ErrLayerNotRetained = errors.New("layer not retained") // ErrMountDoesNotExist is used when an operation is // attempted on a mount layer which does not exist. ErrMountDoesNotExist = errors.New("mount does not exist") // ErrMountNameConflict is used when a mount is attempted // to be created but there is already a mount with the name // used for creation. ErrMountNameConflict = errors.New("mount already exists with name") // ErrMaxDepthExceeded is used when a layer is attempted // to be created which would result in a layer depth // greater than the 125 max. ErrMaxDepthExceeded = errors.New("max depth exceeded") )
var EmptyLayer = &emptyLayer{}
    EmptyLayer is a layer that corresponds to empty tar.
Functions ¶
func LogReleaseMetadata ¶
func LogReleaseMetadata(metadatas []Metadata)
LogReleaseMetadata logs a metadata array, uses this to ensure consistent logging for release metadata
func ReleaseAndLog ¶
ReleaseAndLog releases the provided layer from the given layer store, logging any error and release metadata
Types ¶
type ChainID ¶
type ChainID digest.Digest
ChainID is the content-addressable ID of a layer.
func CreateChainID ¶
CreateChainID returns ID for a layerDigest slice
type CreateRWLayerOpts ¶
CreateRWLayerOpts contains optional arguments to be passed to CreateRWLayer
type DescribableStore ¶
type DescribableStore interface {
	RegisterWithDescriptor(io.Reader, ChainID, distribution.Descriptor) (Layer, error)
}
    DescribableStore represents a layer store capable of storing descriptors for layers.
type Layer ¶
type Layer interface {
	TarStreamer
	// TarStreamFrom returns a tar archive stream for all the layer chain with
	// arbitrary depth.
	TarStreamFrom(ChainID) (io.ReadCloser, error)
	// ChainID returns the content hash of the entire layer chain. The hash
	// chain is made up of DiffID of top layer and all of its parents.
	ChainID() ChainID
	// DiffID returns the content hash of the layer
	// tar stream used to create this layer.
	DiffID() DiffID
	// Parent returns the next layer in the layer chain.
	Parent() Layer
	// Size returns the size of the entire layer chain. The size
	// is calculated from the total size of all files in the layers.
	Size() int64
	// DiffSize returns the size difference of the top layer
	// from parent layer.
	DiffSize() int64
	// Metadata returns the low level storage metadata associated
	// with layer.
	Metadata() (map[string]string, error)
}
    Layer represents a read-only layer
type Metadata ¶
type Metadata struct {
	// ChainID is the content hash of the layer
	ChainID ChainID
	// DiffID is the hash of the tar data used to
	// create the layer
	DiffID DiffID
	// Size is the size of the layer and all parents
	Size int64
	// DiffSize is the size of the top layer
	DiffSize int64
}
    Metadata holds information about a read-only layer
type MountInit ¶
MountInit is a function to initialize a writable mount. Changes made here will not be included in the Tar stream of the RWLayer.
type RWLayer ¶
type RWLayer interface {
	TarStreamer
	// Name of mounted layer
	Name() string
	// Parent returns the layer which the writable
	// layer was created from.
	Parent() Layer
	// Mount mounts the RWLayer and returns the filesystem path
	// to the writable layer.
	Mount(mountLabel string) (string, error)
	// Unmount unmounts the RWLayer. This should be called
	// for every mount. If there are multiple mount calls
	// this operation will only decrement the internal mount counter.
	Unmount() error
	// Size represents the size of the writable layer
	// as calculated by the total size of the files
	// changed in the mutable layer.
	Size() (int64, error)
	// Changes returns the set of changes for the mutable layer
	// from the base layer.
	Changes() ([]archive.Change, error)
	// Metadata returns the low level metadata for the mutable layer
	Metadata() (map[string]string, error)
	// ApplyDiff applies the diff to the RW layer
	ApplyDiff(diff io.Reader) (int64, error)
}
    RWLayer represents a layer which is read and writable
type Store ¶
type Store interface {
	Register(io.Reader, ChainID) (Layer, error)
	Get(ChainID) (Layer, error)
	Map() map[ChainID]Layer
	Release(Layer) ([]Metadata, error)
	CreateRWLayer(id string, parent ChainID, opts *CreateRWLayerOpts) (RWLayer, error)
	GetRWLayer(id string) (RWLayer, error)
	GetMountID(id string) (string, error)
	ReleaseRWLayer(RWLayer) ([]Metadata, error)
	Cleanup() error
	DriverStatus() [][2]string
	DriverName() string
}
    Store represents a backend for managing both read-only and read-write layers.
func NewStoreFromOptions ¶
func NewStoreFromOptions(options StoreOptions) (Store, error)
NewStoreFromOptions creates a new Store instance
type StoreOptions ¶
type StoreOptions struct {
	Root                      string
	MetadataStorePathTemplate string
	GraphDriver               string
	GraphDriverOptions        []string
	IDMapping                 idtools.IdentityMapping
	PluginGetter              plugingetter.PluginGetter
	ExperimentalEnabled       bool
}
    StoreOptions are the options used to create a new Store instance
type TarStreamer ¶
type TarStreamer interface {
	// TarStream returns a tar archive stream
	// for the contents of a layer.
	TarStream() (io.ReadCloser, error)
}
    TarStreamer represents an object which may have its contents exported as a tar stream.