Skip to content

Commit 225b4b5

Browse files
committed
ipfs registry: use buffer when read from IPFS to reduce requests
Signed-off-by: Kohei Tokunaga <[email protected]>
1 parent a6992ab commit 225b4b5

File tree

1 file changed

+26
-2
lines changed

1 file changed

+26
-2
lines changed

pkg/ipfs/registry.go

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package ipfs
1818

1919
import (
20+
"bufio"
2021
"context"
2122
"encoding/json"
2223
"fmt"
@@ -152,7 +153,7 @@ func (s *server) getReadSeekCloser(c cid.Cid) (io.ReadSeekCloser, error) {
152153
if err != nil {
153154
return nil, err
154155
}
155-
return &readSeekCloser{r, closeFunc}, nil
156+
return newReadSeekCloser(r, closeFunc), nil
156157
}
157158

158159
func (s *server) getFile(c cid.Cid) (*io.SectionReader, func() error, error) {
@@ -243,9 +244,32 @@ func getMediaType(desc ocispec.Descriptor) string {
243244
return "application/octet-stream"
244245
}
245246

247+
func newReadSeekCloser(rs io.ReadSeeker, closeFunc func() error) io.ReadSeekCloser {
248+
rsc := &readSeekCloser{
249+
rs: rs,
250+
closeFunc: closeFunc,
251+
}
252+
rsc.curR = bufio.NewReaderSize(rsc.rs, 512*1024)
253+
return rsc
254+
}
255+
246256
type readSeekCloser struct {
247-
io.ReadSeeker
257+
rs io.ReadSeeker
248258
closeFunc func() error
259+
curR *bufio.Reader
260+
}
261+
262+
func (r *readSeekCloser) Read(p []byte) (int, error) {
263+
return r.curR.Read(p)
264+
}
265+
266+
func (r *readSeekCloser) Seek(offset int64, whence int) (int64, error) {
267+
n, err := r.rs.Seek(offset, whence)
268+
if err != nil {
269+
return 0, err
270+
}
271+
r.curR.Reset(r.rs)
272+
return n, nil
249273
}
250274

251275
func (r *readSeekCloser) Close() error { return r.closeFunc() }

0 commit comments

Comments
 (0)