Skip to content

Commit 857e46a

Browse files
committed
pdp browser rendering
1 parent 574859f commit 857e46a

File tree

5 files changed

+23
-14
lines changed

5 files changed

+23
-14
lines changed

lib/cachedreader/cachedreader.go

+10-8
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,10 @@ type cachedSectionReader struct {
8181
// err is non-nil if there's an error getting the underlying piece reader
8282
err error
8383
// cancel for underlying GetPieceReader call
84-
cancel func()
85-
refs int
86-
expired bool
84+
cancel func()
85+
refs int
86+
expired bool
87+
pdpPiece bool
8788
}
8889

8990
func (r *cachedSectionReader) Close() error {
@@ -192,7 +193,7 @@ func (cpr *CachedPieceReader) getPieceReaderFromPiecePark(ctx context.Context, p
192193
return reader, abi.UnpaddedPieceSize(pieceData[0].PieceRawSize), nil
193194
}
194195

195-
func (cpr *CachedPieceReader) GetSharedPieceReader(ctx context.Context, pieceCid cid.Cid) (storiface.Reader, abi.UnpaddedPieceSize, error) {
196+
func (cpr *CachedPieceReader) GetSharedPieceReader(ctx context.Context, pieceCid cid.Cid) (storiface.Reader, abi.UnpaddedPieceSize, bool, error) {
196197
var r *cachedSectionReader
197198

198199
// Check if there is already a piece reader in the cache
@@ -228,8 +229,9 @@ func (cpr *CachedPieceReader) GetSharedPieceReader(ctx context.Context, pieceCid
228229
r.err = fmt.Errorf("failed to get piece reader from sector or piece park: %w, %w", err, serr)
229230
readerCtxCancel()
230231

231-
return nil, 0, r.err
232+
return nil, 0, false, r.err
232233
}
234+
r.pdpPiece = true
233235
}
234236

235237
r.reader = reader
@@ -248,7 +250,7 @@ func (cpr *CachedPieceReader) GetSharedPieceReader(ctx context.Context, pieceCid
248250
// The context timed out. Dereference the cached piece reader and
249251
// return an error.
250252
_ = r.Close()
251-
return nil, 0, ctx.Err()
253+
return nil, 0, false, ctx.Err()
252254
case <-r.ready:
253255
}
254256
}
@@ -257,7 +259,7 @@ func (cpr *CachedPieceReader) GetSharedPieceReader(ctx context.Context, pieceCid
257259
// that the cached reader gets cleaned up
258260
if r.err != nil {
259261
_ = r.Close()
260-
return nil, 0, r.err
262+
return nil, 0, false, r.err
261263
}
262264

263265
rs := io.NewSectionReader(r.reader, 0, int64(r.pieceSize))
@@ -272,5 +274,5 @@ func (cpr *CachedPieceReader) GetSharedPieceReader(ctx context.Context, pieceCid
272274
Reader: rs,
273275
Seeker: rs,
274276
ReaderAt: r.reader,
275-
}, r.pieceSize, nil
277+
}, r.pieceSize, r.pdpPiece, nil
276278
}

market/ipni/chunker/serve-chunker.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ func (p *ServeChunker) getEntry(rctx context.Context, block cid.Cid, speculated
218218
func (p *ServeChunker) reconstructChunkFromCar(ctx context.Context, chunk, piece cid.Cid, startOff int64, next ipld.Link, numBlocks int64, speculate bool) ([]byte, error) {
219219
start := time.Now()
220220

221-
reader, _, err := p.cpr.GetSharedPieceReader(ctx, piece)
221+
reader, _, _, err := p.cpr.GetSharedPieceReader(ctx, piece)
222222
defer func(reader storiface.Reader) {
223223
_ = reader.Close()
224224
}(reader)

market/retrieval/piecehandler.go

+6-3
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ func (rp *Provider) handleByPieceCid(w http.ResponseWriter, r *http.Request) {
4545
}
4646

4747
// Get a reader over the piece
48-
reader, size, err := rp.cpr.GetSharedPieceReader(ctx, pieceCid)
48+
reader, size, pdpPiece, err := rp.cpr.GetSharedPieceReader(ctx, pieceCid)
4949
if err != nil {
5050
log.Errorf("server error getting content for piece CID %s: %s", pieceCid, err)
5151
if errors.Is(err, cachedreader.NoDealErr) {
@@ -58,19 +58,22 @@ func (rp *Provider) handleByPieceCid(w http.ResponseWriter, r *http.Request) {
5858
return
5959
}
6060

61-
setHeaders(w, pieceCid)
61+
setHeaders(w, pieceCid, pdpPiece)
6262
serveContent(w, r, size, reader)
6363

6464
stats.Record(ctx, remoteblockstore.HttpPieceByCid200ResponseCount.M(1))
6565
stats.Record(ctx, remoteblockstore.HttpPieceByCidRequestDuration.M(float64(time.Since(startTime).Milliseconds())))
6666
}
6767

68-
func setHeaders(w http.ResponseWriter, pieceCid cid.Cid) {
68+
func setHeaders(w http.ResponseWriter, pieceCid cid.Cid, pdpPiece bool) {
6969
w.Header().Set("Vary", "Accept-Encoding")
7070
etag := `"` + pieceCid.String() + `.gz"` // must be quoted
7171
w.Header().Set("Etag", etag)
7272
w.Header().Set("Content-Type", "application/piece")
7373
w.Header().Set("Cache-Control", "public, max-age=29030400, immutable")
74+
if pdpPiece {
75+
w.Header().Set("Content-Disposition", "inline")
76+
}
7477
}
7578

7679
func serveContent(res http.ResponseWriter, req *http.Request, size abi.UnpaddedPieceSize, content io.ReadSeeker) {

market/retrieval/remoteblockstore/remoteblockstore.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ func (ro *RemoteBlockstore) Get(ctx context.Context, c cid.Cid) (b blocks.Block,
116116
for _, piece := range pieces {
117117
data, err := func() ([]byte, error) {
118118
// Get a reader over the piece data
119-
reader, _, err := ro.cpr.GetSharedPieceReader(ctx, piece.PieceCid)
119+
reader, _, _, err := ro.cpr.GetSharedPieceReader(ctx, piece.PieceCid)
120120
if err != nil {
121121
return nil, fmt.Errorf("getting piece reader: %w", err)
122122
}

tasks/pdp/task_prove.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -392,11 +392,15 @@ func (p *ProveTask) genSubrootMemtree(ctx context.Context, subrootCid string, su
392392
return nil, xerrors.Errorf("subroot size exceeds maximum: %d", subrootSize)
393393
}
394394

395-
subrootReader, unssize, err := p.cpr.GetSharedPieceReader(ctx, subrootCidObj)
395+
subrootReader, unssize, pdpPiece, err := p.cpr.GetSharedPieceReader(ctx, subrootCidObj)
396396
if err != nil {
397397
return nil, xerrors.Errorf("failed to get subroot reader: %w", err)
398398
}
399399

400+
if !pdpPiece {
401+
return nil, xerrors.Errorf("subroot is not a PDP piece")
402+
}
403+
400404
var r io.Reader = subrootReader
401405

402406
if unssize.Padded() > subrootSize {

0 commit comments

Comments
 (0)