mirror of
https://github.com/containers/podman.git
synced 2025-09-15 20:56:00 +08:00
Vendor in containers/(storage,image, common, buildah)
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
This commit is contained in:
88
vendor/github.com/containers/storage/layers.go
generated
vendored
88
vendor/github.com/containers/storage/layers.go
generated
vendored
@ -2,6 +2,7 @@ package storage
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
@ -27,7 +28,6 @@ import (
|
||||
"github.com/klauspost/pgzip"
|
||||
digest "github.com/opencontainers/go-digest"
|
||||
"github.com/opencontainers/selinux/go-selinux/label"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/sirupsen/logrus"
|
||||
"github.com/vbatts/tar-split/archive/tar"
|
||||
"github.com/vbatts/tar-split/tar/asm"
|
||||
@ -481,7 +481,7 @@ func (r *layerStore) Save() error {
|
||||
|
||||
func (r *layerStore) saveLayers() error {
|
||||
if !r.IsReadWrite() {
|
||||
return errors.Wrapf(ErrStoreIsReadOnly, "not allowed to modify the layer store at %q", r.layerspath())
|
||||
return fmt.Errorf("not allowed to modify the layer store at %q: %w", r.layerspath(), ErrStoreIsReadOnly)
|
||||
}
|
||||
if !r.Locked() {
|
||||
return errors.New("layer store is not locked for writing")
|
||||
@ -500,7 +500,7 @@ func (r *layerStore) saveLayers() error {
|
||||
|
||||
func (r *layerStore) saveMounts() error {
|
||||
if !r.IsReadWrite() {
|
||||
return errors.Wrapf(ErrStoreIsReadOnly, "not allowed to modify the layer store at %q", r.layerspath())
|
||||
return fmt.Errorf("not allowed to modify the layer store at %q: %w", r.layerspath(), ErrStoreIsReadOnly)
|
||||
}
|
||||
if !r.mountsLockfile.Locked() {
|
||||
return errors.New("layer store mount information is not locked for writing")
|
||||
@ -611,7 +611,7 @@ func (r *layerStore) Size(name string) (int64, error) {
|
||||
|
||||
func (r *layerStore) ClearFlag(id string, flag string) error {
|
||||
if !r.IsReadWrite() {
|
||||
return errors.Wrapf(ErrStoreIsReadOnly, "not allowed to clear flags on layers at %q", r.layerspath())
|
||||
return fmt.Errorf("not allowed to clear flags on layers at %q: %w", r.layerspath(), ErrStoreIsReadOnly)
|
||||
}
|
||||
layer, ok := r.lookup(id)
|
||||
if !ok {
|
||||
@ -623,7 +623,7 @@ func (r *layerStore) ClearFlag(id string, flag string) error {
|
||||
|
||||
func (r *layerStore) SetFlag(id string, flag string, value interface{}) error {
|
||||
if !r.IsReadWrite() {
|
||||
return errors.Wrapf(ErrStoreIsReadOnly, "not allowed to set flags on layers at %q", r.layerspath())
|
||||
return fmt.Errorf("not allowed to set flags on layers at %q: %w", r.layerspath(), ErrStoreIsReadOnly)
|
||||
}
|
||||
layer, ok := r.lookup(id)
|
||||
if !ok {
|
||||
@ -694,7 +694,7 @@ func (r *layerStore) PutAdditionalLayer(id string, parentLayer *Layer, names []s
|
||||
|
||||
func (r *layerStore) Put(id string, parentLayer *Layer, names []string, mountLabel string, options map[string]string, moreOptions *LayerOptions, writeable bool, flags map[string]interface{}, diff io.Reader) (*Layer, int64, error) {
|
||||
if !r.IsReadWrite() {
|
||||
return nil, -1, errors.Wrapf(ErrStoreIsReadOnly, "not allowed to create new layers at %q", r.layerspath())
|
||||
return nil, -1, fmt.Errorf("not allowed to create new layers at %q: %w", r.layerspath(), ErrStoreIsReadOnly)
|
||||
}
|
||||
if err := os.MkdirAll(r.rundir, 0700); err != nil {
|
||||
return nil, -1, err
|
||||
@ -824,19 +824,19 @@ func (r *layerStore) Put(id string, parentLayer *Layer, names []string, mountLab
|
||||
if moreOptions.TemplateLayer != "" {
|
||||
if err := r.driver.CreateFromTemplate(id, moreOptions.TemplateLayer, templateIDMappings, parent, parentMappings, &opts, writeable); err != nil {
|
||||
cleanupFailureContext = "creating a layer from template"
|
||||
return nil, -1, errors.Wrapf(err, "error creating copy of template layer %q with ID %q", moreOptions.TemplateLayer, id)
|
||||
return nil, -1, fmt.Errorf("creating copy of template layer %q with ID %q: %w", moreOptions.TemplateLayer, id, err)
|
||||
}
|
||||
oldMappings = templateIDMappings
|
||||
} else {
|
||||
if writeable {
|
||||
if err := r.driver.CreateReadWrite(id, parent, &opts); err != nil {
|
||||
cleanupFailureContext = "creating a read-write layer"
|
||||
return nil, -1, errors.Wrapf(err, "error creating read-write layer with ID %q", id)
|
||||
return nil, -1, fmt.Errorf("creating read-write layer with ID %q: %w", id, err)
|
||||
}
|
||||
} else {
|
||||
if err := r.driver.Create(id, parent, &opts); err != nil {
|
||||
cleanupFailureContext = "creating a read-only layer"
|
||||
return nil, -1, errors.Wrapf(err, "error creating layer with ID %q", id)
|
||||
return nil, -1, fmt.Errorf("creating layer with ID %q: %w", id, err)
|
||||
}
|
||||
}
|
||||
oldMappings = parentMappings
|
||||
@ -897,7 +897,7 @@ func (r *layerStore) Create(id string, parent *Layer, names []string, mountLabel
|
||||
|
||||
func (r *layerStore) Mounted(id string) (int, error) {
|
||||
if !r.IsReadWrite() {
|
||||
return 0, errors.Wrapf(ErrStoreIsReadOnly, "no mount information for layers at %q", r.mountspath())
|
||||
return 0, fmt.Errorf("no mount information for layers at %q: %w", r.mountspath(), ErrStoreIsReadOnly)
|
||||
}
|
||||
r.mountsLockfile.RLock()
|
||||
defer r.mountsLockfile.Unlock()
|
||||
@ -927,7 +927,7 @@ func (r *layerStore) Mount(id string, options drivers.MountOpts) (string, error)
|
||||
// You are not allowed to mount layers from readonly stores if they
|
||||
// are not mounted read/only.
|
||||
if !r.IsReadWrite() && !hasReadOnlyOpt(options.Options) {
|
||||
return "", errors.Wrapf(ErrStoreIsReadOnly, "not allowed to update mount locations for layers at %q", r.mountspath())
|
||||
return "", fmt.Errorf("not allowed to update mount locations for layers at %q: %w", r.mountspath(), ErrStoreIsReadOnly)
|
||||
}
|
||||
r.mountsLockfile.Lock()
|
||||
defer r.mountsLockfile.Unlock()
|
||||
@ -978,7 +978,7 @@ func (r *layerStore) Mount(id string, options drivers.MountOpts) (string, error)
|
||||
|
||||
func (r *layerStore) Unmount(id string, force bool) (bool, error) {
|
||||
if !r.IsReadWrite() {
|
||||
return false, errors.Wrapf(ErrStoreIsReadOnly, "not allowed to update mount locations for layers at %q", r.mountspath())
|
||||
return false, fmt.Errorf("not allowed to update mount locations for layers at %q: %w", r.mountspath(), ErrStoreIsReadOnly)
|
||||
}
|
||||
r.mountsLockfile.Lock()
|
||||
defer r.mountsLockfile.Unlock()
|
||||
@ -1017,7 +1017,7 @@ func (r *layerStore) Unmount(id string, force bool) (bool, error) {
|
||||
|
||||
func (r *layerStore) ParentOwners(id string) (uids, gids []int, err error) {
|
||||
if !r.IsReadWrite() {
|
||||
return nil, nil, errors.Wrapf(ErrStoreIsReadOnly, "no mount information for layers at %q", r.mountspath())
|
||||
return nil, nil, fmt.Errorf("no mount information for layers at %q: %w", r.mountspath(), ErrStoreIsReadOnly)
|
||||
}
|
||||
r.mountsLockfile.RLock()
|
||||
defer r.mountsLockfile.Unlock()
|
||||
@ -1040,7 +1040,7 @@ func (r *layerStore) ParentOwners(id string) (uids, gids []int, err error) {
|
||||
}
|
||||
rootuid, rootgid, err := idtools.GetRootUIDGID(layer.UIDMap, layer.GIDMap)
|
||||
if err != nil {
|
||||
return nil, nil, errors.Wrapf(err, "error reading root ID values for layer %q", layer.ID)
|
||||
return nil, nil, fmt.Errorf("reading root ID values for layer %q: %w", layer.ID, err)
|
||||
}
|
||||
m := idtools.NewIDMappingsFromMaps(layer.UIDMap, layer.GIDMap)
|
||||
fsuids := make(map[int]struct{})
|
||||
@ -1048,7 +1048,7 @@ func (r *layerStore) ParentOwners(id string) (uids, gids []int, err error) {
|
||||
for dir := filepath.Dir(layer.MountPoint); dir != "" && dir != string(os.PathSeparator); dir = filepath.Dir(dir) {
|
||||
st, err := system.Stat(dir)
|
||||
if err != nil {
|
||||
return nil, nil, errors.Wrap(err, "read directory ownership")
|
||||
return nil, nil, fmt.Errorf("read directory ownership: %w", err)
|
||||
}
|
||||
lst, err := system.Lstat(dir)
|
||||
if err != nil {
|
||||
@ -1105,7 +1105,7 @@ func (r *layerStore) RemoveNames(id string, names []string) error {
|
||||
|
||||
func (r *layerStore) updateNames(id string, names []string, op updateNameOperation) error {
|
||||
if !r.IsReadWrite() {
|
||||
return errors.Wrapf(ErrStoreIsReadOnly, "not allowed to change layer name assignments at %q", r.layerspath())
|
||||
return fmt.Errorf("not allowed to change layer name assignments at %q: %w", r.layerspath(), ErrStoreIsReadOnly)
|
||||
}
|
||||
layer, ok := r.lookup(id)
|
||||
if !ok {
|
||||
@ -1139,25 +1139,25 @@ func (r *layerStore) datapath(id, key string) string {
|
||||
|
||||
func (r *layerStore) BigData(id, key string) (io.ReadCloser, error) {
|
||||
if key == "" {
|
||||
return nil, errors.Wrapf(ErrInvalidBigDataName, "can't retrieve layer big data value for empty name")
|
||||
return nil, fmt.Errorf("can't retrieve layer big data value for empty name: %w", ErrInvalidBigDataName)
|
||||
}
|
||||
layer, ok := r.lookup(id)
|
||||
if !ok {
|
||||
return nil, errors.Wrapf(ErrLayerUnknown, "error locating layer with ID %q", id)
|
||||
return nil, fmt.Errorf("locating layer with ID %q: %w", id, ErrLayerUnknown)
|
||||
}
|
||||
return os.Open(r.datapath(layer.ID, key))
|
||||
}
|
||||
|
||||
func (r *layerStore) SetBigData(id, key string, data io.Reader) error {
|
||||
if key == "" {
|
||||
return errors.Wrapf(ErrInvalidBigDataName, "can't set empty name for layer big data item")
|
||||
return fmt.Errorf("can't set empty name for layer big data item: %w", ErrInvalidBigDataName)
|
||||
}
|
||||
if !r.IsReadWrite() {
|
||||
return errors.Wrapf(ErrStoreIsReadOnly, "not allowed to save data items associated with layers at %q", r.layerspath())
|
||||
return fmt.Errorf("not allowed to save data items associated with layers at %q: %w", r.layerspath(), ErrStoreIsReadOnly)
|
||||
}
|
||||
layer, ok := r.lookup(id)
|
||||
if !ok {
|
||||
return errors.Wrapf(ErrLayerUnknown, "error locating layer with ID %q to write bigdata", id)
|
||||
return fmt.Errorf("locating layer with ID %q to write bigdata: %w", id, ErrLayerUnknown)
|
||||
}
|
||||
err := os.MkdirAll(r.datadir(layer.ID), 0700)
|
||||
if err != nil {
|
||||
@ -1169,16 +1169,16 @@ func (r *layerStore) SetBigData(id, key string, data io.Reader) error {
|
||||
// so that it is either accessing the old data or the new one.
|
||||
writer, err := ioutils.NewAtomicFileWriter(r.datapath(layer.ID, key), 0600)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "error opening bigdata file")
|
||||
return fmt.Errorf("opening bigdata file: %w", err)
|
||||
}
|
||||
|
||||
if _, err := io.Copy(writer, data); err != nil {
|
||||
writer.Close()
|
||||
return errors.Wrapf(err, "error copying bigdata for the layer")
|
||||
return fmt.Errorf("copying bigdata for the layer: %w", err)
|
||||
|
||||
}
|
||||
if err := writer.Close(); err != nil {
|
||||
return errors.Wrapf(err, "error closing bigdata file for the layer")
|
||||
return fmt.Errorf("closing bigdata file for the layer: %w", err)
|
||||
}
|
||||
|
||||
addName := true
|
||||
@ -1198,7 +1198,7 @@ func (r *layerStore) SetBigData(id, key string, data io.Reader) error {
|
||||
func (r *layerStore) BigDataNames(id string) ([]string, error) {
|
||||
layer, ok := r.lookup(id)
|
||||
if !ok {
|
||||
return nil, errors.Wrapf(ErrImageUnknown, "error locating layer with ID %q to retrieve bigdata names", id)
|
||||
return nil, fmt.Errorf("locating layer with ID %q to retrieve bigdata names: %w", id, ErrImageUnknown)
|
||||
}
|
||||
return copyStringSlice(layer.BigDataNames), nil
|
||||
}
|
||||
@ -1212,7 +1212,7 @@ func (r *layerStore) Metadata(id string) (string, error) {
|
||||
|
||||
func (r *layerStore) SetMetadata(id, metadata string) error {
|
||||
if !r.IsReadWrite() {
|
||||
return errors.Wrapf(ErrStoreIsReadOnly, "not allowed to modify layer metadata at %q", r.layerspath())
|
||||
return fmt.Errorf("not allowed to modify layer metadata at %q: %w", r.layerspath(), ErrStoreIsReadOnly)
|
||||
}
|
||||
if layer, ok := r.lookup(id); ok {
|
||||
layer.Metadata = metadata
|
||||
@ -1238,7 +1238,7 @@ func layerHasIncompleteFlag(layer *Layer) bool {
|
||||
|
||||
func (r *layerStore) deleteInternal(id string) error {
|
||||
if !r.IsReadWrite() {
|
||||
return errors.Wrapf(ErrStoreIsReadOnly, "not allowed to delete layers at %q", r.layerspath())
|
||||
return fmt.Errorf("not allowed to delete layers at %q: %w", r.layerspath(), ErrStoreIsReadOnly)
|
||||
}
|
||||
layer, ok := r.lookup(id)
|
||||
if !ok {
|
||||
@ -1337,7 +1337,7 @@ func (r *layerStore) Delete(id string) error {
|
||||
// driver level.
|
||||
mountCount, err := r.Mounted(id)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "error checking if layer %q is still mounted", id)
|
||||
return fmt.Errorf("checking if layer %q is still mounted: %w", id, err)
|
||||
}
|
||||
for mountCount > 0 {
|
||||
if _, err := r.Unmount(id, false); err != nil {
|
||||
@ -1345,7 +1345,7 @@ func (r *layerStore) Delete(id string) error {
|
||||
}
|
||||
mountCount, err = r.Mounted(id)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "error checking if layer %q is still mounted", id)
|
||||
return fmt.Errorf("checking if layer %q is still mounted: %w", id, err)
|
||||
}
|
||||
}
|
||||
if err := r.deleteInternal(id); err != nil {
|
||||
@ -1375,7 +1375,7 @@ func (r *layerStore) Get(id string) (*Layer, error) {
|
||||
|
||||
func (r *layerStore) Wipe() error {
|
||||
if !r.IsReadWrite() {
|
||||
return errors.Wrapf(ErrStoreIsReadOnly, "not allowed to delete layers at %q", r.layerspath())
|
||||
return fmt.Errorf("not allowed to delete layers at %q: %w", r.layerspath(), ErrStoreIsReadOnly)
|
||||
}
|
||||
ids := make([]string, 0, len(r.byid))
|
||||
for id := range r.byid {
|
||||
@ -1530,7 +1530,7 @@ func (r *layerStore) Diff(from, to string, options *DiffOptions) (io.ReadCloser,
|
||||
diff, err := archive.DecompressStream(blob)
|
||||
if err != nil {
|
||||
if err2 := blob.Close(); err2 != nil {
|
||||
err = errors.Wrapf(err, "failed to close blob file: %v", err2)
|
||||
err = fmt.Errorf("failed to close blob file: %v: %w", err2, err)
|
||||
}
|
||||
aLayer.Release()
|
||||
return nil, err
|
||||
@ -1538,7 +1538,7 @@ func (r *layerStore) Diff(from, to string, options *DiffOptions) (io.ReadCloser,
|
||||
rc, err := maybeCompressReadCloser(diff)
|
||||
if err != nil {
|
||||
if err2 := closeAll(blob.Close, diff.Close); err2 != nil {
|
||||
err = errors.Wrapf(err, "failed to cleanup: %v", err2)
|
||||
err = fmt.Errorf("failed to cleanup: %v: %w", err2, err)
|
||||
}
|
||||
aLayer.Release()
|
||||
return nil, err
|
||||
@ -1576,12 +1576,12 @@ func (r *layerStore) Diff(from, to string, options *DiffOptions) (io.ReadCloser,
|
||||
|
||||
fgetter, err := r.newFileGetter(to)
|
||||
if err != nil {
|
||||
errs := multierror.Append(nil, errors.Wrapf(err, "creating file-getter"))
|
||||
errs := multierror.Append(nil, fmt.Errorf("creating file-getter: %w", err))
|
||||
if err := decompressor.Close(); err != nil {
|
||||
errs = multierror.Append(errs, errors.Wrapf(err, "closing decompressor"))
|
||||
errs = multierror.Append(errs, fmt.Errorf("closing decompressor: %w", err))
|
||||
}
|
||||
if err := tsfile.Close(); err != nil {
|
||||
errs = multierror.Append(errs, errors.Wrapf(err, "closing tarstream headers"))
|
||||
errs = multierror.Append(errs, fmt.Errorf("closing tarstream headers: %w", err))
|
||||
}
|
||||
return nil, errs.ErrorOrNil()
|
||||
}
|
||||
@ -1590,16 +1590,16 @@ func (r *layerStore) Diff(from, to string, options *DiffOptions) (io.ReadCloser,
|
||||
rc := ioutils.NewReadCloserWrapper(tarstream, func() error {
|
||||
var errs *multierror.Error
|
||||
if err := decompressor.Close(); err != nil {
|
||||
errs = multierror.Append(errs, errors.Wrapf(err, "closing decompressor"))
|
||||
errs = multierror.Append(errs, fmt.Errorf("closing decompressor: %w", err))
|
||||
}
|
||||
if err := tsfile.Close(); err != nil {
|
||||
errs = multierror.Append(errs, errors.Wrapf(err, "closing tarstream headers"))
|
||||
errs = multierror.Append(errs, fmt.Errorf("closing tarstream headers: %w", err))
|
||||
}
|
||||
if err := tarstream.Close(); err != nil {
|
||||
errs = multierror.Append(errs, errors.Wrapf(err, "closing reconstructed tarstream"))
|
||||
errs = multierror.Append(errs, fmt.Errorf("closing reconstructed tarstream: %w", err))
|
||||
}
|
||||
if err := fgetter.Close(); err != nil {
|
||||
errs = multierror.Append(errs, errors.Wrapf(err, "closing file-getter"))
|
||||
errs = multierror.Append(errs, fmt.Errorf("closing file-getter: %w", err))
|
||||
}
|
||||
if errs != nil {
|
||||
return errs.ErrorOrNil()
|
||||
@ -1624,7 +1624,7 @@ func (r *layerStore) ApplyDiff(to string, diff io.Reader) (size int64, err error
|
||||
|
||||
func (r *layerStore) applyDiffWithOptions(to string, layerOptions *LayerOptions, diff io.Reader) (size int64, err error) {
|
||||
if !r.IsReadWrite() {
|
||||
return -1, errors.Wrapf(ErrStoreIsReadOnly, "not allowed to modify layer contents at %q", r.layerspath())
|
||||
return -1, fmt.Errorf("not allowed to modify layer contents at %q: %w", r.layerspath(), ErrStoreIsReadOnly)
|
||||
}
|
||||
|
||||
layer, ok := r.lookup(to)
|
||||
@ -1671,7 +1671,7 @@ func (r *layerStore) applyDiffWithOptions(to string, layerOptions *LayerOptions,
|
||||
compressor = pgzip.NewWriter(&tsdata)
|
||||
}
|
||||
if err := compressor.SetConcurrency(1024*1024, 1); err != nil { // 1024*1024 is the hard-coded default; we're not changing that
|
||||
logrus.Infof("Error setting compression concurrency threads to 1: %v; ignoring", err)
|
||||
logrus.Infof("setting compression concurrency threads to 1: %v; ignoring", err)
|
||||
}
|
||||
metadata := storage.NewJSONPacker(compressor)
|
||||
uncompressed, err := archive.DecompressStream(defragmented)
|
||||
@ -1920,7 +1920,7 @@ func (r *layerStore) Modified() (bool, error) {
|
||||
// reload the storage in any case.
|
||||
info, err := os.Stat(r.layerspath())
|
||||
if err != nil && !os.IsNotExist(err) {
|
||||
return false, errors.Wrap(err, "stat layers file")
|
||||
return false, fmt.Errorf("stat layers file: %w", err)
|
||||
}
|
||||
if info != nil {
|
||||
tmodified = info.ModTime() != r.layerspathModified
|
||||
@ -1957,10 +1957,10 @@ func closeAll(closes ...func() error) (rErr error) {
|
||||
for _, f := range closes {
|
||||
if err := f(); err != nil {
|
||||
if rErr == nil {
|
||||
rErr = errors.Wrapf(err, "close error")
|
||||
rErr = fmt.Errorf("close error: %w", err)
|
||||
continue
|
||||
}
|
||||
rErr = errors.Wrapf(rErr, "%v", err)
|
||||
rErr = fmt.Errorf("%v: %w", err, rErr)
|
||||
}
|
||||
}
|
||||
return
|
||||
|
Reference in New Issue
Block a user