Skip to content

Commit f6a07f4

Browse files
authored
Merge pull request #5140 from mxpv/reader
Add OpenReader to local store
2 parents 7738246 + 571cc32 commit f6a07f4

3 files changed

Lines changed: 32 additions & 16 deletions

File tree

content/content.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ type Provider interface {
3737
// ReaderAt only requires desc.Digest to be set.
3838
// Other fields in the descriptor may be used internally for resolving
3939
// the location of the actual data.
40-
ReaderAt(ctx context.Context, dec ocispec.Descriptor) (ReaderAt, error)
40+
ReaderAt(ctx context.Context, desc ocispec.Descriptor) (ReaderAt, error)
4141
}
4242

4343
// Ingester writes content

content/local/readerat.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@ package local
1818

1919
import (
2020
"os"
21+
22+
"github.com/pkg/errors"
23+
24+
"github.com/containerd/containerd/content"
25+
"github.com/containerd/containerd/errdefs"
2126
)
2227

2328
// readerat implements io.ReaderAt in a completely stateless manner by opening
@@ -27,6 +32,29 @@ type sizeReaderAt struct {
2732
fp *os.File
2833
}
2934

35+
// OpenReader creates ReaderAt from a file
36+
func OpenReader(p string) (content.ReaderAt, error) {
37+
fi, err := os.Stat(p)
38+
if err != nil {
39+
if !os.IsNotExist(err) {
40+
return nil, err
41+
}
42+
43+
return nil, errors.Wrap(errdefs.ErrNotFound, "blob not found")
44+
}
45+
46+
fp, err := os.Open(p)
47+
if err != nil {
48+
if !os.IsNotExist(err) {
49+
return nil, err
50+
}
51+
52+
return nil, errors.Wrap(errdefs.ErrNotFound, "blob not found")
53+
}
54+
55+
return sizeReaderAt{size: fi.Size(), fp: fp}, nil
56+
}
57+
3058
func (ra sizeReaderAt) ReadAt(p []byte, offset int64) (int, error) {
3159
return ra.fp.ReadAt(p, offset)
3260
}

content/local/store.go

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -131,25 +131,13 @@ func (s *store) ReaderAt(ctx context.Context, desc ocispec.Descriptor) (content.
131131
if err != nil {
132132
return nil, errors.Wrapf(err, "calculating blob path for ReaderAt")
133133
}
134-
fi, err := os.Stat(p)
135-
if err != nil {
136-
if !os.IsNotExist(err) {
137-
return nil, err
138-
}
139134

140-
return nil, errors.Wrapf(errdefs.ErrNotFound, "blob %s expected at %s", desc.Digest, p)
141-
}
142-
143-
fp, err := os.Open(p)
135+
reader, err := OpenReader(p)
144136
if err != nil {
145-
if !os.IsNotExist(err) {
146-
return nil, err
147-
}
148-
149-
return nil, errors.Wrapf(errdefs.ErrNotFound, "blob %s expected at %s", desc.Digest, p)
137+
return nil, errors.Wrapf(err, "blob %s expected at %s", desc.Digest, p)
150138
}
151139

152-
return sizeReaderAt{size: fi.Size(), fp: fp}, nil
140+
return reader, nil
153141
}
154142

155143
// Delete removes a blob by its digest.

0 commit comments

Comments
 (0)