Merge pull request #1877 from yanxuean/add-unmount-fail-error

output unmount error when unmount fail in diff.Apply
This commit is contained in:
Michael Crosby 2017-12-04 22:45:46 -05:00 committed by GitHub
commit a9caf9bf4e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -94,12 +94,20 @@ func (s *walkingDiff) Apply(ctx context.Context, desc ocispec.Descriptor, mounts
if err != nil { if err != nil {
return emptyDesc, errors.Wrap(err, "failed to create temporary directory") return emptyDesc, errors.Wrap(err, "failed to create temporary directory")
} }
// We change RemoveAll to Remove so that we either leak a temp dir
// if it fails but not RM snapshot data. refer to #1868 #1785
defer os.Remove(dir) defer os.Remove(dir)
if err := mount.All(mounts, dir); err != nil { if err := mount.All(mounts, dir); err != nil {
return emptyDesc, errors.Wrap(err, "failed to mount") return emptyDesc, errors.Wrap(err, "failed to mount")
} }
defer mount.Unmount(dir, 0) defer func() {
if uerr := mount.Unmount(dir, 0); uerr != nil {
if err == nil {
err = uerr
}
}
}()
ra, err := s.store.ReaderAt(ctx, desc.Digest) ra, err := s.store.ReaderAt(ctx, desc.Digest)
if err != nil { if err != nil {
@ -175,12 +183,24 @@ func (s *walkingDiff) DiffMounts(ctx context.Context, lower, upper []mount.Mount
if err := mount.All(lower, aDir); err != nil { if err := mount.All(lower, aDir); err != nil {
return emptyDesc, errors.Wrap(err, "failed to mount") return emptyDesc, errors.Wrap(err, "failed to mount")
} }
defer mount.Unmount(aDir, 0) defer func() {
if uerr := mount.Unmount(aDir, 0); uerr != nil {
if err == nil {
err = uerr
}
}
}()
if err := mount.All(upper, bDir); err != nil { if err := mount.All(upper, bDir); err != nil {
return emptyDesc, errors.Wrap(err, "failed to mount") return emptyDesc, errors.Wrap(err, "failed to mount")
} }
defer mount.Unmount(bDir, 0) defer func() {
if uerr := mount.Unmount(bDir, 0); uerr != nil {
if err == nil {
err = uerr
}
}
}()
var newReference bool var newReference bool
if config.Reference == "" { if config.Reference == "" {