Skip to content

Commit

Permalink
add functions needed to import data on the miner side
Browse files Browse the repository at this point in the history
  • Loading branch information
whyrusleeping committed Feb 8, 2020
1 parent 67fca94 commit b38c8a7
Show file tree
Hide file tree
Showing 5 changed files with 190 additions and 12 deletions.
50 changes: 50 additions & 0 deletions storagemarket/impl/provider.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package storageimpl

import (
"bytes"
"context"
"errors"
"io"
"os"
"sync"

"github.com/ipfs/go-cid"
Expand Down Expand Up @@ -292,3 +295,50 @@ func (p *Provider) Stop() error {
<-p.stopped
return p.net.StopHandlingRequests()
}

func (p *Provider) ImportDataForDeal(ctx context.Context, propCid cid.Cid, data io.Reader) error {
// TODO: be able to check if we have enough disk space
var d MinerDeal
if err := p.deals.Get(propCid).Get(&d); err != nil {
return xerrors.Errorf("failed getting deal %s: %w", propCid, err)
}

tempfi, err := p.fs.CreateTemp()
if err != nil {
return xerrors.Errorf("failed to create temp file for data import: %w", err)
}

n, err := io.Copy(tempfi, data)
if err != nil {
return xerrors.Errorf("importing deal data failed: %w", err)
}
_ = n // TODO: verify n?

_, err = tempfi.Seek(0, os.SEEK_SET)
if err != nil {
return xerrors.Errorf("failed to seek through temp imported file: %w", err)
}

commP, err := p.pio.ReadPiece(tempfi)
if err != nil {
return xerrors.Errorf("failed to generate commP")
}

if !bytes.Equal(commP.Bytes(), d.Proposal.PieceRef) {
return xerrors.Errorf("given data does not match expected commP (got: %x, expected %x)", commP.Bytes(), d.Proposal.PieceRef)
}

select {
case p.updated <- minerDealUpdate{
newState: storagemarket.StorageDealPublishing,
id: propCid,
mut: func(deal *MinerDeal) {
deal.PiecePath = tempfi.Path()
},
}:
case <-ctx.Done():
return ctx.Err()
}

return nil
}
4 changes: 2 additions & 2 deletions storagemarket/impl/provider_states.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package storageimpl
import (
"bytes"
"context"
"fmt"

"github.com/filecoin-project/go-padreader"
"github.com/ipfs/go-cid"
Expand Down Expand Up @@ -80,7 +79,8 @@ func (p *Provider) validating(ctx context.Context, deal MinerDeal) (func(*MinerD
// State: StorageDealTransferring
func (p *Provider) transferring(ctx context.Context, deal MinerDeal) (func(*MinerDeal), error) {
if deal.Ref.TransferType == storagemarket.TTManual {
return nil, fmt.Errorf("attempted to graphsync a deal marked as manual transfer")
log.Info("deal entering manual transfer state")
return nil, nil
}

ssb := builder.NewSelectorSpecBuilder(ipldfree.NodeBuilder())
Expand Down
28 changes: 23 additions & 5 deletions storagemarket/network/types_cbor_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion storagemarket/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import (
"github.com/filecoin-project/go-fil-markets/shared/types"
)

//go:generate cbor-gen-for ClientDeal MinerDeal StorageDeal Balance StorageDealProposal
//go:generate cbor-gen-for ClientDeal MinerDeal StorageDeal Balance StorageDealProposal DataRef

const DealProtocolID = "/fil/storage/mk/1.0.1"
const AskProtocolID = "/fil/storage/ask/1.0.1"
Expand Down Expand Up @@ -207,6 +207,8 @@ type StorageProvider interface {

// GetStorageCollateral returns the current collateral balance
GetStorageCollateral(ctx context.Context) (Balance, error)

ImportDataForDeal(ctx context.Context, propCid cid.Cid, data io.Reader) error
}

// Node dependencies for a StorageProvider
Expand Down
116 changes: 112 additions & 4 deletions storagemarket/types_cbor_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit b38c8a7

Please sign in to comment.