@cryptotaxi247 / kubo / commits / ff3efb564

always prefetch at least 5 blocks ahead

This should reduce stuttering when streaming. License: MIT Signed-off-by: Steven Allen <steven@stebalien.com>

Steven Allen committed Jun 27, 2018 at 17:08 UTC ff3efb5646437ac77c6b75e0452b239d154928c5
1 file changed +8 -4
unixfs/io/pbdagreader.go
+8 -4
@@ -68,8 +68,7 @@ func NewPBFileReader(ctx context.Context, n *mdag.ProtoNode, pb *ftpb.Data, serv
68
69 const preloadSize = 10
70
71 -func (dr *PBDagReader) preloadNextNodes(ctx context.Context) {
72 - beg := dr.linkPosition
71 +func (dr *PBDagReader) preload(ctx context.Context, beg int) {
72 end := beg + preloadSize
73 if end >= len(dr.links) {
74 end = len(dr.links)
@@ -90,8 +89,13 @@ func (dr *PBDagReader) precalcNextBuf(ctx context.Context) error {
89 return io.EOF
90 }
91
93 - if dr.promises[dr.linkPosition] == nil {
94 - dr.preloadNextNodes(ctx)
92 + // If we drop to <= preloadSize/2 preloading nodes, preload the next 10.
93 + for i := dr.linkPosition; i < dr.linkPosition+preloadSize/2 && i < len(dr.promises); i++ {
94 + // TODO: check if canceled.
95 + if dr.promises[i] == nil {
96 + dr.preload(ctx, i)
97 + break
98 + }
99 }
100
101 nxt, err := dr.promises[dr.linkPosition].Get(ctx)