Skip to content

Commit bb6a95a

Browse files
authored
fix: group by piece_id when calculating PieceCIDv2 for piece list (#675)
Fixes: #650
1 parent 91aff56 commit bb6a95a

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

pdp/handlers.go

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -561,21 +561,29 @@ func (p *PDPService) handleGetDataSet(w http.ResponseWriter, r *http.Request) {
561561
Pieces: []PieceEntry{}, // Initialize as empty array, not nil
562562
}
563563

564-
// Calculate aggregate piece raw sizes by summing sub-piece raw sizes
565-
pieceRawSizes := make(map[string]uint64)
564+
// Calculate aggregate piece raw sizes by summing sub-piece raw sizes (group by piece_id)
565+
pieceRawSizes := make(map[uint64]uint64)
566566
for _, piece := range pieces {
567-
pieceRawSizes[piece.PieceCid] += piece.SubPieceRawSize
567+
pieceRawSizes[piece.PieceID] += piece.SubPieceRawSize
568568
}
569569

570+
aggregatePieceCIDs := make(map[uint64]string)
571+
570572
// Convert pieces to the desired JSON format
571573
for _, piece := range pieces {
572-
// Use the summed raw size for the aggregate piece
573-
aggregateRawSize := pieceRawSizes[piece.PieceCid]
574-
pcv2, _, err := asPieceCIDv2(piece.PieceCid, aggregateRawSize)
575-
if err != nil {
576-
http.Error(w, "Invalid PieceCID: "+err.Error(), http.StatusBadRequest)
577-
return
574+
// Calculate aggregate piece CID on first use for this piece_id
575+
pcv2Str, exists := aggregatePieceCIDs[piece.PieceID]
576+
if !exists {
577+
aggregateRawSize := pieceRawSizes[piece.PieceID]
578+
pcv2, _, err := asPieceCIDv2(piece.PieceCid, aggregateRawSize)
579+
if err != nil {
580+
http.Error(w, "Invalid PieceCID: "+err.Error(), http.StatusBadRequest)
581+
return
582+
}
583+
pcv2Str = pcv2.String()
584+
aggregatePieceCIDs[piece.PieceID] = pcv2Str
578585
}
586+
579587
// Use the raw size for the sub piece
580588
spcv2, _, err := asPieceCIDv2(piece.SubPieceCID, piece.SubPieceRawSize)
581589
if err != nil {
@@ -584,7 +592,7 @@ func (p *PDPService) handleGetDataSet(w http.ResponseWriter, r *http.Request) {
584592
}
585593
response.Pieces = append(response.Pieces, PieceEntry{
586594
PieceID: piece.PieceID,
587-
PieceCID: pcv2.String(),
595+
PieceCID: pcv2Str,
588596
SubPieceCID: spcv2.String(),
589597
SubPieceOffset: piece.SubPieceOffset,
590598
})

0 commit comments

Comments
 (0)