Merge pull request #5566 from dmcgowan/cleanup-diff-walking
Revert diff/walking error change
This commit is contained in:
		| @@ -80,7 +80,7 @@ func (s *walkingDiff) Compare(ctx context.Context, lower, upper []mount.Mount, o | |||||||
|  |  | ||||||
| 	var ocidesc ocispec.Descriptor | 	var ocidesc ocispec.Descriptor | ||||||
| 	if err := mount.WithTempMount(ctx, lower, func(lowerRoot string) error { | 	if err := mount.WithTempMount(ctx, lower, func(lowerRoot string) error { | ||||||
| 		return mount.WithTempMount(ctx, upper, func(upperRoot string) (retErr error) { | 		return mount.WithTempMount(ctx, upper, func(upperRoot string) error { | ||||||
| 			var newReference bool | 			var newReference bool | ||||||
| 			if config.Reference == "" { | 			if config.Reference == "" { | ||||||
| 				newReference = true | 				newReference = true | ||||||
| @@ -95,8 +95,12 @@ func (s *walkingDiff) Compare(ctx context.Context, lower, upper []mount.Mount, o | |||||||
| 			if err != nil { | 			if err != nil { | ||||||
| 				return errors.Wrap(err, "failed to open writer") | 				return errors.Wrap(err, "failed to open writer") | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
|  | 			// errOpen is set when an error occurs while the content writer has not been | ||||||
|  | 			// committed or closed yet to force a cleanup | ||||||
|  | 			var errOpen error | ||||||
| 			defer func() { | 			defer func() { | ||||||
| 				if retErr != nil { | 				if errOpen != nil { | ||||||
| 					cw.Close() | 					cw.Close() | ||||||
| 					if newReference { | 					if newReference { | ||||||
| 						if abortErr := s.store.Abort(ctx, config.Reference); abortErr != nil { | 						if abortErr := s.store.Abort(ctx, config.Reference); abortErr != nil { | ||||||
| @@ -106,22 +110,22 @@ func (s *walkingDiff) Compare(ctx context.Context, lower, upper []mount.Mount, o | |||||||
| 				} | 				} | ||||||
| 			}() | 			}() | ||||||
| 			if !newReference { | 			if !newReference { | ||||||
| 				if err = cw.Truncate(0); err != nil { | 				if errOpen = cw.Truncate(0); errOpen != nil { | ||||||
| 					return err | 					return errOpen | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
| 			if isCompressed { | 			if isCompressed { | ||||||
| 				dgstr := digest.SHA256.Digester() | 				dgstr := digest.SHA256.Digester() | ||||||
| 				var compressed io.WriteCloser | 				var compressed io.WriteCloser | ||||||
| 				compressed, err = compression.CompressStream(cw, compression.Gzip) | 				compressed, errOpen = compression.CompressStream(cw, compression.Gzip) | ||||||
| 				if err != nil { | 				if errOpen != nil { | ||||||
| 					return errors.Wrap(err, "failed to get compressed stream") | 					return errors.Wrap(errOpen, "failed to get compressed stream") | ||||||
| 				} | 				} | ||||||
| 				err = archive.WriteDiff(ctx, io.MultiWriter(compressed, dgstr.Hash()), lowerRoot, upperRoot) | 				errOpen = archive.WriteDiff(ctx, io.MultiWriter(compressed, dgstr.Hash()), lowerRoot, upperRoot) | ||||||
| 				compressed.Close() | 				compressed.Close() | ||||||
| 				if err != nil { | 				if errOpen != nil { | ||||||
| 					return errors.Wrap(err, "failed to write compressed diff") | 					return errors.Wrap(errOpen, "failed to write compressed diff") | ||||||
| 				} | 				} | ||||||
|  |  | ||||||
| 				if config.Labels == nil { | 				if config.Labels == nil { | ||||||
| @@ -129,8 +133,8 @@ func (s *walkingDiff) Compare(ctx context.Context, lower, upper []mount.Mount, o | |||||||
| 				} | 				} | ||||||
| 				config.Labels[uncompressed] = dgstr.Digest().String() | 				config.Labels[uncompressed] = dgstr.Digest().String() | ||||||
| 			} else { | 			} else { | ||||||
| 				if err = archive.WriteDiff(ctx, cw, lowerRoot, upperRoot); err != nil { | 				if errOpen = archive.WriteDiff(ctx, cw, lowerRoot, upperRoot); errOpen != nil { | ||||||
| 					return errors.Wrap(err, "failed to write diff") | 					return errors.Wrap(errOpen, "failed to write diff") | ||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
| @@ -140,10 +144,11 @@ func (s *walkingDiff) Compare(ctx context.Context, lower, upper []mount.Mount, o | |||||||
| 			} | 			} | ||||||
|  |  | ||||||
| 			dgst := cw.Digest() | 			dgst := cw.Digest() | ||||||
| 			if err := cw.Commit(ctx, 0, dgst, commitopts...); err != nil { | 			if errOpen = cw.Commit(ctx, 0, dgst, commitopts...); errOpen != nil { | ||||||
| 				if !errdefs.IsAlreadyExists(err) { | 				if !errdefs.IsAlreadyExists(errOpen) { | ||||||
| 					return errors.Wrap(err, "failed to commit") | 					return errors.Wrap(errOpen, "failed to commit") | ||||||
| 				} | 				} | ||||||
|  | 				errOpen = nil | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
| 			info, err := s.store.Info(ctx, dgst) | 			info, err := s.store.Info(ctx, dgst) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Fu Wei
					Fu Wei