get and set storage deal acceptance through CLI

This commit is contained in:
laser 2020-06-11 12:59:50 -07:00
parent 67110ce739
commit 7587e6c08b
8 changed files with 56 additions and 6 deletions

View File

@ -54,6 +54,7 @@ type StorageMiner interface {
DealsImportData(ctx context.Context, dealPropCid cid.Cid, file string) error
DealsList(ctx context.Context) ([]storagemarket.StorageDeal, error)
DealsSetIsAcceptingStorageDeals(ctx context.Context, b bool) error
StorageAddLocal(ctx context.Context, path string) error
}

View File

@ -220,8 +220,9 @@ type StorageMinerStruct struct {
StorageLock func(ctx context.Context, sector abi.SectorID, read stores.SectorFileType, write stores.SectorFileType) error `perm:"admin"`
StorageTryLock func(ctx context.Context, sector abi.SectorID, read stores.SectorFileType, write stores.SectorFileType) (bool, error) `perm:"admin"`
DealsImportData func(ctx context.Context, dealPropCid cid.Cid, file string) error `perm:"write"`
DealsList func(ctx context.Context) ([]storagemarket.StorageDeal, error) `perm:"read"`
DealsImportData func(ctx context.Context, dealPropCid cid.Cid, file string) error `perm:"write"`
DealsList func(ctx context.Context) ([]storagemarket.StorageDeal, error) `perm:"read"`
DealsSetIsAcceptingStorageDeals func(ctx context.Context, b bool) error `perm:"admin"`
StorageAddLocal func(ctx context.Context, path string) error `perm:"admin"`
}
@ -852,6 +853,10 @@ func (c *StorageMinerStruct) DealsList(ctx context.Context) ([]storagemarket.Sto
return c.Internal.DealsList(ctx)
}
func (c *StorageMinerStruct) DealsSetIsAcceptingStorageDeals(ctx context.Context, b bool) error {
return c.Internal.DealsSetIsAcceptingStorageDeals(ctx, b)
}
func (c *StorageMinerStruct) StorageAddLocal(ctx context.Context, path string) error {
return c.Internal.StorageAddLocal(ctx, path)
}

View File

@ -33,8 +33,6 @@ func main() {
setPriceCmd,
workersCmd,
provingCmd,
enableCmd,
disableCmd,
}
jaeger := tracing.SetupJaegerTracing("lotus")
defer func() {

View File

@ -15,7 +15,13 @@ var enableCmd = &cli.Command{
Usage: "Configure the miner to consider storage deal proposals",
Flags: []cli.Flag{},
Action: func(cctx *cli.Context) error {
panic("enable storage deals")
api, closer, err := lcli.GetStorageMinerAPI(cctx)
if err != nil {
return err
}
defer closer()
return api.DealsSetIsAcceptingStorageDeals(lcli.DaemonContext(cctx), true)
},
}
@ -24,7 +30,13 @@ var disableCmd = &cli.Command{
Usage: "Configure the miner to reject all storage deal proposals",
Flags: []cli.Flag{},
Action: func(cctx *cli.Context) error {
panic("disable storage deals")
api, closer, err := lcli.GetStorageMinerAPI(cctx)
if err != nil {
return err
}
defer closer()
return api.DealsSetIsAcceptingStorageDeals(lcli.DaemonContext(cctx), false)
},
}
@ -60,6 +72,8 @@ var dealsCmd = &cli.Command{
Subcommands: []*cli.Command{
dealsImportDataCmd,
dealsListCmd,
enableCmd,
disableCmd,
},
}

View File

@ -314,6 +314,7 @@ func Online() Option {
Override(new(gen.WinningPoStProver), storage.NewWinningPoStProver),
Override(new(*miner.Miner), modules.SetupBlockProducer),
Override(new(dtypes.IsAcceptingStorageDealsFunc), modules.NewIsAcceptingStorageDealsFunc),
Override(new(dtypes.SetAcceptingStorageDealsFunc), modules.NewSetAcceptingStorageDealsFunc),
),
)
}

View File

@ -25,6 +25,7 @@ import (
"github.com/filecoin-project/lotus/chain/types"
"github.com/filecoin-project/lotus/miner"
"github.com/filecoin-project/lotus/node/impl/common"
"github.com/filecoin-project/lotus/node/modules/dtypes"
"github.com/filecoin-project/lotus/storage"
"github.com/filecoin-project/lotus/storage/sectorblocks"
)
@ -41,6 +42,8 @@ type StorageMinerAPI struct {
Full api.FullNode
StorageMgr *sectorstorage.Manager `optional:"true"`
*stores.Index
SetAcceptingStorageDealsFunc dtypes.SetAcceptingStorageDealsFunc
}
func (sm *StorageMinerAPI) ServeRemote(w http.ResponseWriter, r *http.Request) {
@ -206,6 +209,10 @@ func (sm *StorageMinerAPI) DealsList(ctx context.Context) ([]storagemarket.Stora
return sm.StorageProvider.ListDeals(ctx)
}
func (sm *StorageMinerAPI) DealsSetIsAcceptingStorageDeals(ctx context.Context, b bool) error {
return sm.SetAcceptingStorageDealsFunc(b)
}
func (sm *StorageMinerAPI) DealsImportData(ctx context.Context, deal cid.Cid, fname string) error {
fi, err := os.Open(fname)
if err != nil {

View File

@ -11,3 +11,7 @@ type MinerID abi.ActorID
// IsAcceptingStorageDealsFunc is a function which reads from miner config to
// determine if the user has disabled storage deals (or not).
type IsAcceptingStorageDealsFunc func() (bool, error)
// SetAcceptingStorageDealsFunc is a function which is used to disable or enable
// storage deal acceptance.
type SetAcceptingStorageDealsFunc func(bool) error

View File

@ -2,6 +2,7 @@ package modules
import (
"context"
"errors"
"net/http"
"github.com/ipfs/go-bitswap"
@ -17,6 +18,7 @@ import (
"github.com/libp2p/go-libp2p-core/host"
"github.com/libp2p/go-libp2p-core/routing"
"go.uber.org/fx"
"go.uber.org/multierr"
"golang.org/x/xerrors"
"github.com/filecoin-project/go-address"
@ -392,3 +394,21 @@ func NewIsAcceptingStorageDealsFunc(r repo.LockedRepo) (dtypes.IsAcceptingStorag
return cfg.Dealmaking.IsAcceptingStorageDeals, nil
}, nil
}
func NewSetAcceptingStorageDealsFunc(r repo.LockedRepo) (dtypes.SetAcceptingStorageDealsFunc, error) {
return func(b bool) error {
var typeErr error
setConfigErr := r.SetConfig(func(raw interface{}) {
cfg, ok := raw.(*config.StorageMiner)
if !ok {
typeErr = errors.New("expected storage miner config")
return
}
cfg.Dealmaking.IsAcceptingStorageDeals = b
})
return multierr.Combine(typeErr, setConfigErr)
}, nil
}