Skip to content

Commit c3b4ecf

Browse files
committed
Merge branch 'feat/no-temp-files' of ../pieceio
2 parents 88120ef + 6014951 commit c3b4ecf

File tree

12 files changed

+818
-0
lines changed

12 files changed

+818
-0
lines changed

pieceio/README.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# pieceio
2+
3+
The pieceio module is a collection of structs for generating piece commitments (a.k.a. CommP) and
4+
storing pieces for storage market deals. It is used by the
5+
[`storagemarket`](../storagemarket) module.
6+
7+
## Installation
8+
```bash
9+
go get github.com/filecoin-project/go-fil-markets/pieceio
10+
```
11+
12+
## PieceIO
13+
`PieceIO` is used by [`storagemarket`](../storagemarket) client for proposing deals.
14+
15+
**To initialize a PieceIO:**
16+
```go
17+
package pieceio
18+
19+
func NewPieceIO(carIO CarIO, bs blockstore.Blockstore) PieceIO
20+
```
21+
**Parameters**
22+
* `carIO` is a [CarIO](#CarIO) from this module
23+
* `bs` is an IPFS blockstore for storing and retrieving data for deals. See
24+
[github.com/ipfs/go-ipfs-blockstore](github.com/ipfs/go-ipfs-blockstore).
25+
26+
## PieceIOWithStore
27+
`PieceIOWithStore` is `PieceIO` with a [`filestore`](../filestore). It is used by
28+
[`storagemarket`](../storagemarket) provider to store pieces, and to generate and store piece commitments
29+
and piece metadata for deals.
30+
31+
**To initialize a PieceIOWithStore:**
32+
33+
```go
34+
package pieceio
35+
36+
func NewPieceIOWithStore(carIO CarIO, store filestore.FileStore, bs blockstore.Blockstore) PieceIOWithStore
37+
```
38+
**Parameters**
39+
* `carIO` is a [CarIO](#CarIO) from this module
40+
* `store` is a [FileStore](../filestore) from this go-fil-markets repo.
41+
* `bs` is an IPFS blockstore for storing and retrieving data for deals. See
42+
[github.com/ipfs/go-ipfs-blockstore](github.com/ipfs/go-ipfs-blockstore).
43+
44+
## CarIO
45+
CarIO is a utility module that wraps [github.com/ipld/go-car](https://github.com/ipld/go-car) for use by storagemarket.
46+
47+
**To initialize a CarIO:**
48+
```go
49+
package cario
50+
51+
func NewCarIO() pieceio.CarIO
52+
```
53+
54+
Please the [tests](pieceio_test.go) for more information about expected behavior.

pieceio/cario/cario.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package cario
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"io"
7+
8+
"github.com/ipfs/go-cid"
9+
"github.com/ipld/go-car"
10+
"github.com/ipld/go-ipld-prime"
11+
12+
"github.com/filecoin-project/go-fil-markets/pieceio"
13+
)
14+
15+
type carIO struct {
16+
}
17+
18+
// NewCarIO returns a new CarIO utility module that wraps go-car
19+
func NewCarIO() pieceio.CarIO {
20+
return &carIO{}
21+
}
22+
23+
func (c carIO) WriteCar(ctx context.Context, bs pieceio.ReadStore, payloadCid cid.Cid, selector ipld.Node, w io.Writer, userOnNewCarBlocks ...car.OnNewCarBlockFunc) error {
24+
sc := car.NewSelectiveCar(ctx, bs, []car.Dag{{Root: payloadCid, Selector: selector}})
25+
return sc.Write(w, userOnNewCarBlocks...)
26+
}
27+
28+
func (c carIO) PrepareCar(ctx context.Context, bs pieceio.ReadStore, payloadCid cid.Cid, selector ipld.Node, userOnNewCarBlocks ...car.OnNewCarBlockFunc) (pieceio.PreparedCar, error) {
29+
sc := car.NewSelectiveCar(ctx, bs, []car.Dag{{Root: payloadCid, Selector: selector}})
30+
return sc.Prepare(userOnNewCarBlocks...)
31+
}
32+
33+
func (c carIO) LoadCar(bs pieceio.WriteStore, r io.Reader) (cid.Cid, error) {
34+
header, err := car.LoadCar(bs, r)
35+
if err != nil {
36+
return cid.Undef, err
37+
}
38+
l := len(header.Roots)
39+
if l == 0 {
40+
return cid.Undef, fmt.Errorf("invalid header: missing root")
41+
}
42+
if l > 1 {
43+
return cid.Undef, fmt.Errorf("invalid header: contains %d roots (expecting 1)", l)
44+
}
45+
return header.Roots[0], nil
46+
}

pieceio/mocks/CarIO.go

Lines changed: 95 additions & 0 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: 67 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pieceio/mocks/PreparedCar.go

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

pieceio/mocks/ReadStore.go

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

pieceio/mocks/SectorCalculator.go

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

0 commit comments

Comments
 (0)