client: Unbreak retrieval
This commit is contained in:
parent
d370e0ae2d
commit
55f089d997
@ -66,6 +66,8 @@ type API struct {
|
|||||||
Chain *store.ChainStore
|
Chain *store.ChainStore
|
||||||
|
|
||||||
Imports dtypes.ClientImportMgr
|
Imports dtypes.ClientImportMgr
|
||||||
|
|
||||||
|
RetBstore dtypes.ClientBlockstore // TODO: try to remove
|
||||||
}
|
}
|
||||||
|
|
||||||
func calcDealExpiration(minDuration uint64, md *miner.DeadlineInfo, startEpoch abi.ChainEpoch) abi.ChainEpoch {
|
func calcDealExpiration(minDuration uint64, md *miner.DeadlineInfo, startEpoch abi.ChainEpoch) abi.ChainEpoch {
|
||||||
@ -384,13 +386,13 @@ func (a *API) ClientRetrieve(ctx context.Context, order api.RetrievalOrder, ref
|
|||||||
return xerrors.Errorf("cannot make retrieval deal for zero bytes")
|
return xerrors.Errorf("cannot make retrieval deal for zero bytes")
|
||||||
}
|
}
|
||||||
|
|
||||||
id, st, err := a.imgr().NewStore()
|
/*id, st, err := a.imgr().NewStore()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := a.imgr().AddLabel(id, "source", "retrieval"); err != nil {
|
if err := a.imgr().AddLabel(id, "source", "retrieval"); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}*/
|
||||||
|
|
||||||
retrievalResult := make(chan error, 1)
|
retrievalResult := make(chan error, 1)
|
||||||
|
|
||||||
@ -429,7 +431,7 @@ func (a *API) ClientRetrieve(ctx context.Context, order api.RetrievalOrder, ref
|
|||||||
|
|
||||||
ppb := types.BigDiv(order.Total, types.NewInt(order.Size))
|
ppb := types.BigDiv(order.Total, types.NewInt(order.Size))
|
||||||
|
|
||||||
_, err = a.Retrieval.Retrieve(
|
_, err := a.Retrieval.Retrieve(
|
||||||
ctx,
|
ctx,
|
||||||
order.Root,
|
order.Root,
|
||||||
rm.NewParamsV0(ppb, order.PaymentInterval, order.PaymentIntervalIncrease),
|
rm.NewParamsV0(ppb, order.PaymentInterval, order.PaymentIntervalIncrease),
|
||||||
@ -456,23 +458,25 @@ func (a *API) ClientRetrieve(ctx context.Context, order api.RetrievalOrder, ref
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rdag := merkledag.NewDAGService(blockservice.New(a.RetBstore, offline.Exchange(a.RetBstore)))
|
||||||
|
|
||||||
if ref.IsCAR {
|
if ref.IsCAR {
|
||||||
f, err := os.OpenFile(ref.Path, os.O_CREATE|os.O_WRONLY, 0644)
|
f, err := os.OpenFile(ref.Path, os.O_CREATE|os.O_WRONLY, 0644)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
err = car.WriteCar(ctx, st.DAG, []cid.Cid{order.Root}, f)
|
err = car.WriteCar(ctx, rdag, []cid.Cid{order.Root}, f)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return f.Close()
|
return f.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
nd, err := st.DAG.Get(ctx, order.Root)
|
nd, err := rdag.Get(ctx, order.Root)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("ClientRetrieve: %w", err)
|
return xerrors.Errorf("ClientRetrieve: %w", err)
|
||||||
}
|
}
|
||||||
file, err := unixfile.NewUnixfsFile(ctx, st.DAG, nd)
|
file, err := unixfile.NewUnixfsFile(ctx, rdag, nd)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return xerrors.Errorf("ClientRetrieve: %w", err)
|
return xerrors.Errorf("ClientRetrieve: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@ package modules
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"github.com/filecoin-project/lotus/lib/bufbstore"
|
||||||
blockstore "github.com/ipfs/go-ipfs-blockstore"
|
blockstore "github.com/ipfs/go-ipfs-blockstore"
|
||||||
"github.com/libp2p/go-libp2p-core/host"
|
"github.com/libp2p/go-libp2p-core/host"
|
||||||
"go.uber.org/fx"
|
"go.uber.org/fx"
|
||||||
@ -50,7 +50,12 @@ func ClientImportMgr(mds dtypes.ClientMultiDstore, ds dtypes.MetadataDS) dtypes.
|
|||||||
}
|
}
|
||||||
|
|
||||||
func ClientBlockstore(imgr dtypes.ClientImportMgr) dtypes.ClientBlockstore {
|
func ClientBlockstore(imgr dtypes.ClientImportMgr) dtypes.ClientBlockstore {
|
||||||
return blockstore.NewIdStore(imgr.Blockstore)
|
// TODO: This isn't.. the best
|
||||||
|
// - If it's easy to pass per-retrieval blockstores with markets we don't need this
|
||||||
|
// - If it's not easy, we need to store this in a separate datastore on disk
|
||||||
|
defaultWrite := blockstore.NewBlockstore(datastore.NewMapDatastore())
|
||||||
|
|
||||||
|
return blockstore.NewIdStore(bufbstore.NewTieredBstore(imgr.Blockstore, defaultWrite))
|
||||||
}
|
}
|
||||||
|
|
||||||
// RegisterClientValidator is an initialization hook that registers the client
|
// RegisterClientValidator is an initialization hook that registers the client
|
||||||
|
@ -18,7 +18,7 @@ type dsProvider interface {
|
|||||||
DeleteDatastore(namespace string) error
|
DeleteDatastore(namespace string) error
|
||||||
}
|
}
|
||||||
|
|
||||||
type MultiStore struct {
|
type MultiStore struct {
|
||||||
provider dsProvider
|
provider dsProvider
|
||||||
namespace string
|
namespace string
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user