@@ -4,18 +4,15 @@ import (
44 "context"
55 "io"
66 "os"
7- "sync"
87
98 "github.com/ipfs/go-cid"
109 blockstore "github.com/ipfs/go-ipfs-blockstore"
1110 logging "github.com/ipfs/go-log/v2"
1211 "github.com/ipld/go-car"
1312 "github.com/ipld/go-ipld-prime"
14- "golang.org/x/xerrors"
1513
16- ffi "github.com/filecoin-project/filecoin-ffi "
14+ "github.com/filecoin-project/go-commp-utils/writer "
1715 "github.com/filecoin-project/go-multistore"
18- "github.com/filecoin-project/go-padreader"
1916 "github.com/filecoin-project/go-state-types/abi"
2017)
2118
@@ -79,32 +76,25 @@ func (pio *pieceIO) GeneratePieceReader(payloadCid cid.Cid, selector ipld.Node,
7976}
8077
8178func (pio * pieceIO ) GeneratePieceCommitment (rt abi.RegisteredSealProof , payloadCid cid.Cid , selector ipld.Node , storeID * multistore.StoreID , userOnNewCarBlocks ... car.OnNewCarBlockFunc ) (cid.Cid , abi.UnpaddedPieceSize , error ) {
82- r , pieceSize , err , writeErrChan := pio .GeneratePieceReader ( payloadCid , selector , storeID , userOnNewCarBlocks ... )
79+ bstore , err := pio .bstore ( storeID )
8380 if err != nil {
8481 return cid .Undef , 0 , err
8582 }
86- commitment , paddedSize , err := GeneratePieceCommitment (rt , r , pieceSize )
87- closeErr := r .Close ()
83+ preparedCar , err := pio .carIO .PrepareCar (context .Background (), bstore , payloadCid , selector , userOnNewCarBlocks ... )
8884 if err != nil {
8985 return cid .Undef , 0 , err
9086 }
91- if closeErr != nil {
92- return cid .Undef , 0 , closeErr
93- }
94- werr := <- writeErrChan
95- if werr != nil {
96- return cid .Undef , 0 , werr
97- }
98- return commitment , paddedSize , nil
99- }
10087
101- func GeneratePieceCommitment (rt abi.RegisteredSealProof , rd io.Reader , pieceSize uint64 ) (cid.Cid , abi.UnpaddedPieceSize , error ) {
102- paddedReader , paddedSize := padreader .New (rd , pieceSize )
103- commitment , err := GeneratePieceCIDFromFile (rt , paddedReader , paddedSize )
88+ commpWriter := & writer.Writer {}
89+ err = preparedCar .Dump (commpWriter )
10490 if err != nil {
10591 return cid .Undef , 0 , err
10692 }
107- return commitment , paddedSize , nil
93+ dataCIDSize , err := commpWriter .Sum ()
94+ if err != nil {
95+ return cid .Undef , 0 , err
96+ }
97+ return dataCIDSize .PieceCID , dataCIDSize .PieceSize .Unpadded (), nil
10898}
10999
110100func (pio * pieceIO ) ReadPiece (storeID * multistore.StoreID , r io.Reader ) (cid.Cid , error ) {
@@ -125,61 +115,3 @@ func (pio *pieceIO) bstore(storeID *multistore.StoreID) (blockstore.Blockstore,
125115 }
126116 return store .Bstore , nil
127117}
128-
129- func ToReadableFile (r io.Reader , n int64 ) (* os.File , func () error , error ) {
130- f , ok := r .(* os.File )
131- if ok {
132- return f , func () error { return nil }, nil
133- }
134-
135- var w * os.File
136-
137- f , w , err := os .Pipe ()
138- if err != nil {
139- return nil , nil , err
140- }
141-
142- var wait sync.Mutex
143- var werr error
144-
145- wait .Lock ()
146- go func () {
147- defer wait .Unlock ()
148-
149- var copied int64
150- copied , werr = io .CopyN (w , r , n )
151- if werr != nil {
152- log .Warnf ("toReadableFile: copy error: %+v" , werr )
153- }
154-
155- err := w .Close ()
156- if werr == nil && err != nil {
157- werr = err
158- log .Warnf ("toReadableFile: close error: %+v" , err )
159- return
160- }
161- if copied != n {
162- log .Warnf ("copied different amount than expected: %d != %d" , copied , n )
163- werr = xerrors .Errorf ("copied different amount than expected: %d != %d" , copied , n )
164- }
165- }()
166-
167- return f , func () error {
168- wait .Lock ()
169- return werr
170- }, nil
171- }
172-
173- func GeneratePieceCIDFromFile (proofType abi.RegisteredSealProof , piece io.Reader , pieceSize abi.UnpaddedPieceSize ) (cid.Cid , error ) {
174- f , werr , err := ToReadableFile (piece , int64 (pieceSize ))
175- if err != nil {
176- return cid .Undef , err
177- }
178-
179- pieceCID , err := ffi .GeneratePieceCIDFromFile (proofType , f , pieceSize )
180- if err != nil {
181- return cid .Undef , err
182- }
183-
184- return pieceCID , werr ()
185- }
0 commit comments