Skip to content

Commit 9080d78

Browse files
authored
Support Retrieval By Any CID, Not Just Root (#166)
* feat(pieceio): plumb OnNewBlockFunc through PieceIO * feat(storagemarket): add block recorder add functions to hook into car writing and output block information * feat(storagemarket): support all cid recording option Provide an option to record locations of all CIDs in a piece, so that we can support retrieval not only of root cid but all cids inside of a piece Also cleanup file store maintainence so temporary files are always deleted Also build better filestore and piecestore test infrastructure
1 parent b966e51 commit 9080d78

File tree

5 files changed

+52
-55
lines changed

5 files changed

+52
-55
lines changed

pieceio/cario/cario.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ func NewCarIO() pieceio.CarIO {
2020
return &carIO{}
2121
}
2222

23-
func (c carIO) WriteCar(ctx context.Context, bs pieceio.ReadStore, payloadCid cid.Cid, selector ipld.Node, w io.Writer) error {
23+
func (c carIO) WriteCar(ctx context.Context, bs pieceio.ReadStore, payloadCid cid.Cid, selector ipld.Node, w io.Writer, userOnNewCarBlocks ...car.OnNewCarBlockFunc) error {
2424
sc := car.NewSelectiveCar(ctx, bs, []car.Dag{{Root: payloadCid, Selector: selector}})
25-
return sc.Write(w)
25+
return sc.Write(w, userOnNewCarBlocks...)
2626
}
2727

2828
func (c carIO) PrepareCar(ctx context.Context, bs pieceio.ReadStore, payloadCid cid.Cid, selector ipld.Node) (pieceio.PreparedCar, error) {

pieceio/mocks/CarIO.go

Lines changed: 19 additions & 15 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pieceio/mocks/PieceIO.go

Lines changed: 25 additions & 34 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pieceio/pieceio.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/filecoin-project/specs-actors/actors/abi"
1212
"github.com/ipfs/go-cid"
1313
blockstore "github.com/ipfs/go-ipfs-blockstore"
14+
"github.com/ipld/go-car"
1415
"github.com/ipld/go-ipld-prime"
1516

1617
"github.com/filecoin-project/go-fil-markets/filestore"
@@ -23,7 +24,7 @@ type PreparedCar interface {
2324

2425
type CarIO interface {
2526
// WriteCar writes a given payload to a CAR file and into the passed IO stream
26-
WriteCar(ctx context.Context, bs ReadStore, payloadCid cid.Cid, node ipld.Node, w io.Writer) error
27+
WriteCar(ctx context.Context, bs ReadStore, payloadCid cid.Cid, node ipld.Node, w io.Writer, userOnNewCarBlocks ...car.OnNewCarBlockFunc) error
2728

2829
// PrepareCar prepares a car so that it's total size can be calculated without writing it to a file.
2930
// It can then be written with PreparedCar.Dump
@@ -87,7 +88,7 @@ func (pio *pieceIO) GeneratePieceCommitment(rt abi.RegisteredProof, payloadCid c
8788
return commitment, paddedSize, nil
8889
}
8990

90-
func (pio *pieceIOWithStore) GeneratePieceCommitmentToFile(rt abi.RegisteredProof, payloadCid cid.Cid, selector ipld.Node) (cid.Cid, filestore.Path, abi.UnpaddedPieceSize, error) {
91+
func (pio *pieceIOWithStore) GeneratePieceCommitmentToFile(rt abi.RegisteredProof, payloadCid cid.Cid, selector ipld.Node, userOnNewCarBlocks ...car.OnNewCarBlockFunc) (cid.Cid, filestore.Path, abi.UnpaddedPieceSize, error) {
9192
f, err := pio.store.CreateTemp()
9293
if err != nil {
9394
return cid.Undef, "", 0, err
@@ -96,7 +97,7 @@ func (pio *pieceIOWithStore) GeneratePieceCommitmentToFile(rt abi.RegisteredProo
9697
f.Close()
9798
_ = pio.store.Delete(f.Path())
9899
}
99-
err = pio.carIO.WriteCar(context.Background(), pio.bs, payloadCid, selector, f)
100+
err = pio.carIO.WriteCar(context.Background(), pio.bs, payloadCid, selector, f, userOnNewCarBlocks...)
100101
if err != nil {
101102
cleanup()
102103
return cid.Undef, "", 0, err

pieceio/types.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"github.com/filecoin-project/specs-actors/actors/abi"
77
blocks "github.com/ipfs/go-block-format"
88
"github.com/ipfs/go-cid"
9+
"github.com/ipld/go-car"
910
"github.com/ipld/go-ipld-prime"
1011

1112
"github.com/filecoin-project/go-fil-markets/filestore"
@@ -27,5 +28,5 @@ type PieceIO interface {
2728

2829
type PieceIOWithStore interface {
2930
PieceIO
30-
GeneratePieceCommitmentToFile(rt abi.RegisteredProof, payloadCid cid.Cid, selector ipld.Node) (cid.Cid, filestore.Path, abi.UnpaddedPieceSize, error)
31+
GeneratePieceCommitmentToFile(rt abi.RegisteredProof, payloadCid cid.Cid, selector ipld.Node, userOnNewCarBlocks ...car.OnNewCarBlockFunc) (cid.Cid, filestore.Path, abi.UnpaddedPieceSize, error)
3132
}

0 commit comments

Comments
 (0)