@@ -561,21 +561,29 @@ func (p *PDPService) handleGetDataSet(w http.ResponseWriter, r *http.Request) {
561
561
Pieces : []PieceEntry {}, // Initialize as empty array, not nil
562
562
}
563
563
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 )
566
566
for _ , piece := range pieces {
567
- pieceRawSizes [piece .PieceCid ] += piece .SubPieceRawSize
567
+ pieceRawSizes [piece .PieceID ] += piece .SubPieceRawSize
568
568
}
569
569
570
+ aggregatePieceCIDs := make (map [uint64 ]string )
571
+
570
572
// Convert pieces to the desired JSON format
571
573
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
578
585
}
586
+
579
587
// Use the raw size for the sub piece
580
588
spcv2 , _ , err := asPieceCIDv2 (piece .SubPieceCID , piece .SubPieceRawSize )
581
589
if err != nil {
@@ -584,7 +592,7 @@ func (p *PDPService) handleGetDataSet(w http.ResponseWriter, r *http.Request) {
584
592
}
585
593
response .Pieces = append (response .Pieces , PieceEntry {
586
594
PieceID : piece .PieceID ,
587
- PieceCID : pcv2 . String () ,
595
+ PieceCID : pcv2Str ,
588
596
SubPieceCID : spcv2 .String (),
589
597
SubPieceOffset : piece .SubPieceOffset ,
590
598
})
0 commit comments