Skip to content

Commit b88f7a9

Browse files
committed
feat(pieceio): use commp writer
1 parent 0c0393f commit b88f7a9

File tree

4 files changed

+14
-81
lines changed

4 files changed

+14
-81
lines changed

pieceio/pieceio.go

Lines changed: 10 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -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

8178
func (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

110100
func (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-
}

pieceio/pieceio_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"github.com/filecoin-project/go-padreader"
2121
"github.com/filecoin-project/go-state-types/abi"
2222

23+
"github.com/filecoin-project/go-commp-utils/ffiwrapper"
2324
"github.com/filecoin-project/go-commp-utils/pieceio"
2425
"github.com/filecoin-project/go-commp-utils/pieceio/cario"
2526
pmocks "github.com/filecoin-project/go-commp-utils/pieceio/mocks"
@@ -132,7 +133,7 @@ func Test_StoreRestoreMemoryBuffer(t *testing.T) {
132133

133134
paddedReader, secondPaddedSize := padreader.New(r, pieceSize)
134135
require.Equal(t, paddedSize, secondPaddedSize)
135-
secondCommitment, err := pieceio.GeneratePieceCIDFromFile(abi.RegisteredSealProof_StackedDrg2KiBV1, paddedReader, paddedSize)
136+
secondCommitment, err := ffiwrapper.GeneratePieceCIDFromFile(abi.RegisteredSealProof_StackedDrg2KiBV1, paddedReader, paddedSize)
136137
require.NoError(t, err)
137138
require.Equal(t, commitment, secondCommitment)
138139
require.NoError(t, r.Close())

writer/writer.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package commp
1+
package writer
22

33
import (
44
"bytes"

writer/writer_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package commp
1+
package writer
22

33
import (
44
"bytes"

0 commit comments

Comments
 (0)