From a939655f52c8447a219b1d5a7c970980e470add4 Mon Sep 17 00:00:00 2001 From: Aditya R Date: Thu, 24 Feb 2022 16:30:25 +0530 Subject: [PATCH] storage: use race-free AddNames instead of SetNames Commits from parallel builds using `SetNames` removes `names` from storage for other builds. Use race-free atomic `AddNames` to prevent breaking of parallel builds. Signed-off-by: Aditya R --- storage/storage_image.go | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/storage/storage_image.go b/storage/storage_image.go index bcb09c83ce..45e678a943 100644 --- a/storage/storage_image.go +++ b/storage/storage_image.go @@ -1197,21 +1197,18 @@ func (s *storageImageDestination) Commit(ctx context.Context, unparsedToplevel t } logrus.Debugf("saved image metadata %q", string(metadata)) } - // Set the reference's name on the image. We don't need to worry about avoiding duplicate - // values because SetNames() will deduplicate the list that we pass to it. - if name := s.imageRef.DockerReference(); len(oldNames) > 0 || name != nil { + // Adds the reference's name on the image. We don't need to worry about avoiding duplicate + // values because AddNames() will deduplicate the list that we pass to it. + if name := s.imageRef.DockerReference(); name != nil { names := []string{} if name != nil { names = append(names, name.String()) } - if len(oldNames) > 0 { - names = append(names, oldNames...) + if err := s.imageRef.transport.store.AddNames(img.ID, names); err != nil { + logrus.Debugf("error adding names %v on image %q: %v", names, img.ID, err) + return errors.Wrapf(err, "adding names %v on image %q", names, img.ID) } - if err := s.imageRef.transport.store.SetNames(img.ID, names); err != nil { - logrus.Debugf("error setting names %v on image %q: %v", names, img.ID, err) - return errors.Wrapf(err, "setting names %v on image %q", names, img.ID) - } - logrus.Debugf("set names of image %q to %v", img.ID, names) + logrus.Debugf("add names of image %q to %v", img.ID, names) } commitSucceeded = true