-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
snapshot/containerd: fix wrong errdefs package import #5194
Conversation
I noticed that we were importing the nydus errdefs package here, and looking at [f044e0a][1] (v0.12.0-rc1), which introduced this import, this very likely was meant to be containerd's errdefs package. The only function consumed from the package is `errdefs.IsNotFound` which at the time of the commit was not compatible with containerd's `errdefs.IsNotFound` as it was [checking for the nydus error specifically][2]. Nydus-snapshotter v0.8.0 fixed this incompatibility by aliasing the error to [containerd's `ErrNotFound`][3] and was updated through [483e877][4]. Ironically, the original commit [f044e0a][1] broke vendoring, because the Nydus errdefs was no longer vendored. This was fixed in [75dd88e][4], but failed to notice that the missing vendor was due to an incorrect import. So it looks like things were broken _twice_ in the chain of events (once because the wrong errdefs package did not match the expected error; once because the errdefs package was missing), but all of them landed in v0.12.0-rc1, so nothing broke in a release ':-) This PR; - fixes the wrong import - adds a depguard rule to prevent accidental importing of this package [1]: moby@f044e0a [2]: /~https://github.com/moby/buildkit/blob/f044e0a9468639559db93fe30ee826ce502ac481/vendor/github.com/containerd/nydus-snapshotter/pkg/errdefs/errors.go#L22-L33 [3]: /~https://github.com/moby/buildkit/blob/f044e0a9468639559db93fe30ee826ce502ac481/vendor/github.com/containerd/nydus-snapshotter/pkg/errdefs/errors.go#L22-L33 [4]: moby@483e877 [5]: moby@75dd88e Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
734e5f5
to
c6745c3
Compare
info, err := c.main.Info(ctx, dgst) | ||
if err != nil { | ||
if errdefs.IsNotFound(err) { | ||
if cerrdefs.IsNotFound(err) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wonder if this alway works; some implementations appear to not be returning a typed error. For example;
buildkit/cache/remotecache/v1/chains.go
Lines 130 to 136 in 59a3ce5
func (p DescriptorProviderPair) Info(ctx context.Context, dgst digest.Digest) (content.Info, error) { | |
if p.InfoProvider != nil { | |
return p.InfoProvider.Info(ctx, dgst) | |
} | |
if dgst != p.Descriptor.Digest { | |
return content.Info{}, errors.Errorf("content not found %s", dgst) | |
} |
buildkit/cache/remotecache/gha/gha.go
Lines 406 to 409 in 59a3ce5
func (p *ciProvider) Info(ctx context.Context, dgst digest.Digest) (content.Info, error) { | |
if dgst != p.desc.Digest { | |
return content.Info{}, errors.Errorf("content not found %s", dgst) | |
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think these are the implementations for the nsFallbackStore
I noticed that we were importing the nydus errdefs package here, and looking at f044e0a9468639559db93fe30ee826ce502ac481 (v0.12.0-rc1), which introduced this import, this very likely was meant to be containerd's errdefs package.
The only function consumed from the package is
errdefs.IsNotFound
which at the time of the commit was not compatible with containerd'serrdefs.IsNotFound
as it was checking for the nydus error specifically.Nydus-snapshotter v0.8.0 fixed this incompatibility by aliasing the error to containerd's
ErrNotFound
and was updated through 483e87725e7fd99124e3e767143687cfd1d59a8e.Ironically, the original commit f044e0a9468639559db93fe30ee826ce502ac481 broke vendoring, because the Nydus errdefs was no longer vendored. This was fixed in 75dd88efb808edb8c91755565a4417f37b985143, but failed to notice that the missing vendor was due to an incorrect import.
So it looks like things were broken twice in the chain of events (once because the wrong errdefs package did not match the expected error; once because the errdefs package was missing), but all of them landed in v0.12.0-rc1, so nothing broke in a release ':-)
This PR;