Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/lt/miner mgr api #293

Merged
merged 2 commits into from
Mar 7, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 59 additions & 1 deletion api/impl/venus_market.go
Original file line number Diff line number Diff line change
Expand Up @@ -121,12 +121,70 @@ func (m *MarketNodeImpl) ListenMarketEvent(ctx context.Context, policy *gatewayT
return m.IMarketServiceProvider.ListenMarketEvent(ctx, policy)
}

func (m *MarketNodeImpl) ActorUpsert(ctx context.Context, user types.User) (bool, error) {
err := jwtclient.CheckPermissionByMiner(ctx, m.AuthClient, user.Addr)
if err != nil {
return false, err
}

bAdd, err := m.UserMgr.ActorUpsert(ctx, user)
if err != nil {
return false, err
}

if bAdd {
m.Config.Miners = append(m.Config.Miners, &config.MinerConfig{
Addr: config.Address(user.Addr),
Account: user.Account,
})
} else {
for idx := range m.Config.Miners {
if m.Config.Miners[idx].Addr == config.Address(user.Addr) {
m.Config.Miners[idx].Account = user.Account
break
}
}
}
err = config.SaveConfig(m.Config)
if err != nil {
return bAdd, err
}

return bAdd, nil
}

func (m *MarketNodeImpl) ActorDelete(ctx context.Context, mAddr address.Address) error {
err := jwtclient.CheckPermissionByMiner(ctx, m.AuthClient, mAddr)
if err != nil {
return err
}

err = m.UserMgr.ActorDelete(ctx, mAddr)
if err != nil {
return err
}

for idx := range m.Config.Miners {
if m.Config.Miners[idx].Addr == config.Address(mAddr) {
m.Config.Miners = append(m.Config.Miners[:idx], m.Config.Miners[idx+1:]...)
break
}
}

err = config.SaveConfig(m.Config)
if err != nil {
return err
}

return nil
}

func (m *MarketNodeImpl) ActorList(ctx context.Context) ([]types.User, error) {
actors, err := m.UserMgr.ActorList(ctx)
if err != nil {
return nil, err
}
ret := []types.User{}
ret := make([]types.User, 0)
for _, actor := range actors {
if err := jwtclient.CheckPermissionByName(ctx, actor.Account); err == nil {
ret = append(ret, actor)
Expand Down
78 changes: 78 additions & 0 deletions cli/actor.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,97 @@ import (

"github.com/filecoin-project/venus/venus-shared/actors"
"github.com/filecoin-project/venus/venus-shared/types"
mkTypes "github.com/filecoin-project/venus/venus-shared/types/market"
)

var ActorCmd = &cli.Command{
Name: "actor",
Usage: "manipulate the miner actor",
Subcommands: []*cli.Command{
actorUpsertCmd,
actorDeleteCmd,
actorListCmd,
actorSetAddrsCmd,
actorSetPeeridCmd,
actorInfoCmd,
},
}

var actorUpsertCmd = &cli.Command{
Name: "upsert",
Usage: "update or insert a miner to the system",
ArgsUsage: "<miner address>",
Flags: []cli.Flag{
&cli.StringFlag{
Name: "account",
Value: "",
},
},
Action: func(cctx *cli.Context) error {
if !cctx.Args().Present() {
return fmt.Errorf("must set miner address")
}

nodeAPI, closer, err := NewMarketNode(cctx)
if err != nil {
return err
}
defer closer()

mAddr, err := address.NewFromString(cctx.Args().First())
if err != nil {
return err
}

account := cctx.String("account")

bAdd, err := nodeAPI.ActorUpsert(cctx.Context, mkTypes.User{Addr: mAddr, Account: account})
if err != nil {
return err
}

opr := "Add"
if !bAdd {
opr = "Update"
}

fmt.Printf("%s miner %s success\n", opr, mAddr)

return nil
},
}

var actorDeleteCmd = &cli.Command{
Name: "delete",
Usage: "delete the miner from the system",
ArgsUsage: "<miner address>",
Action: func(cctx *cli.Context) error {
if !cctx.Args().Present() {
return fmt.Errorf("must set miner address")
}

nodeAPI, closer, err := NewMarketNode(cctx)
if err != nil {
return err
}
defer closer()

mAddr, err := address.NewFromString(cctx.Args().First())
if err != nil {
return err
}

err = nodeAPI.ActorDelete(cctx.Context, mAddr)
if err != nil {
return err
}

fmt.Printf("delete miner %s success\n", mAddr)

return nil
},
}

var actorListCmd = &cli.Command{
Name: "list",
Usage: "find miners in the system",
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ require (
github.com/filecoin-project/go-statestore v0.2.0
github.com/filecoin-project/specs-actors/v2 v2.3.6
github.com/filecoin-project/specs-actors/v7 v7.0.1
github.com/filecoin-project/venus v1.10.0
github.com/filecoin-project/venus v1.10.1-0.20230307021527-70bd910ad469
github.com/filecoin-project/venus-auth v1.10.0
github.com/filecoin-project/venus-messager v1.10.0
github.com/golang/mock v1.6.0
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -455,8 +455,8 @@ github.com/filecoin-project/storetheindex v0.4.30-0.20221114113647-683091f8e893
github.com/filecoin-project/storetheindex v0.4.30-0.20221114113647-683091f8e893/go.mod h1:S7590oDimBvXMUtzWsBXoshu9HtYKwtXl47zAK9rcP8=
github.com/filecoin-project/test-vectors/schema v0.0.5/go.mod h1:iQ9QXLpYWL3m7warwvK1JC/pTri8mnfEmKygNDqqY6E=
github.com/filecoin-project/venus v1.2.4/go.mod h1:hJULXHGAnWuq5S5KRtPkwbT8DqgM9II7NwyNU7t59D0=
github.com/filecoin-project/venus v1.10.0 h1:UAUR9dwnA5Lx2N67Xg9MT1bHG1IJdFtypsQOFs0KBwA=
github.com/filecoin-project/venus v1.10.0/go.mod h1:lO6L4FiHcW4ad+2R7x2J2slqYkhq/X0ObZfmxkJmZ7M=
github.com/filecoin-project/venus v1.10.1-0.20230307021527-70bd910ad469 h1:tMvzWy7TAc3Ex2B+6hIdQVzHUNRTzJAhKncwTTn2Ehg=
github.com/filecoin-project/venus v1.10.1-0.20230307021527-70bd910ad469/go.mod h1:lO6L4FiHcW4ad+2R7x2J2slqYkhq/X0ObZfmxkJmZ7M=
github.com/filecoin-project/venus-auth v1.3.2/go.mod h1:m5Jog2GYxztwP7w3m/iJdv/V1/bTcAVU9rm/CbhxRQU=
github.com/filecoin-project/venus-auth v1.10.0 h1:0V5R36HIvLKRFJQjKkW0tjYazgHkDW/gmjwuEtKL1SA=
github.com/filecoin-project/venus-auth v1.10.0/go.mod h1:MoirCIFdK8FNIFXpBbgF4xhRsjGi4KHHfW1EF6iAwZ8=
Expand Down
19 changes: 13 additions & 6 deletions minermgr/miner_mgr.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,23 @@ func NewMinerMgrImpl(_ metrics.MetricsCtx, cfg *config.MarketConfig) (IMinerMgr,
return m, nil
}

func (m *MinerMgrImpl) MinerList(context.Context) ([]address.Address, error) {
func (m *MinerMgrImpl) ActorUpsert(_ context.Context, user market.User) (bool, error) {
m.lk.Lock()
defer m.lk.Unlock()

miners := make([]address.Address, 0, len(m.miners))
for miner := range m.miners {
miners = append(miners, miner)
}
_, ok := m.miners[user.Addr]
m.miners[user.Addr] = &user

return !ok, nil
}

func (m *MinerMgrImpl) ActorDelete(_ context.Context, mAddr address.Address) error {
m.lk.Lock()
defer m.lk.Unlock()

delete(m.miners, mAddr)

return miners, nil
return nil
}

func (m *MinerMgrImpl) ActorList(_ context.Context) ([]market.User, error) {
Expand Down
5 changes: 2 additions & 3 deletions minermgr/module.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,11 @@ import (
marketTypes "github.com/filecoin-project/venus/venus-shared/types/market"
)

// todo 支持动态配置?

type IMinerMgr interface {
Has(context.Context, address.Address) bool
MinerList(context.Context) ([]address.Address, error)
ActorList(ctx context.Context) ([]marketTypes.User, error)
ActorUpsert(context.Context, marketTypes.User) (bool, error)
ActorDelete(context.Context, address.Address) error
}

var MinerMgrOpts = func() builder.Option {
Expand Down
20 changes: 10 additions & 10 deletions storageprovider/deal_tracker.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,24 +67,24 @@ func (dealTracker *DealTracker) Start(ctx metrics.MetricsCtx) {
}

func (dealTracker *DealTracker) scanDeal(ctx metrics.MetricsCtx) {
addrs, err := dealTracker.minerMgr.MinerList(ctx)
actors, err := dealTracker.minerMgr.ActorList(ctx)
if err != nil {
log.Errorf("get miners list %w", err)
log.Errorf("get actor list err: %s", err)
}
head, err := dealTracker.fullNode.ChainHead(ctx)
if err != nil {
log.Errorf("get chain head %w", err)
log.Errorf("get chain head err: %s", err)
}

for _, addr := range addrs {
err = dealTracker.checkSlash(ctx, addr, head)
for _, actor := range actors {
err = dealTracker.checkSlash(ctx, actor.Addr, head)
if err != nil {
log.Errorf("fail to check slash %w", err)
log.Errorf("check slash err: %s", err)
}

err = dealTracker.checkPreCommitAndCommit(ctx, addr, head)
err = dealTracker.checkPreCommitAndCommit(ctx, actor.Addr, head)
if err != nil {
log.Errorf("fail to check precommit/commit/expired %w", err)
log.Errorf("check precommit/commit expired err: %s", err)
}
}
}
Expand Down Expand Up @@ -115,7 +115,7 @@ func (dealTracker *DealTracker) checkPreCommitAndCommit(ctx metrics.MetricsCtx,
if dealProposal.State.SectorStartEpoch > -1 { // include in sector
err = dealTracker.storageRepo.UpdateDealStatus(ctx, deal.ProposalCid, storagemarket.StorageDealActive, market.Proving)
if err != nil {
log.Errorf("update deal status to active for sector %d of miner %s %w", deal.SectorNumber, addr, err)
log.Errorf("update deal status to active for sector %d of miner %s err: %s", deal.SectorNumber, addr, err)
continue
}

Expand All @@ -133,7 +133,7 @@ func (dealTracker *DealTracker) checkPreCommitAndCommit(ctx metrics.MetricsCtx,
return fmt.Errorf("get precommit info for sector %d of miner %s: %w", deal.SectorNumber, addr, err)
}

if preInfo == nil { // precommit maybe not submitted
if preInfo == nil { // PreCommit maybe not submitted
continue
}

Expand Down
12 changes: 5 additions & 7 deletions storageprovider/storageprovider_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -163,11 +163,6 @@ type mockAddrMgr struct{}

var _ minermgr.IMinerMgr = (*mockAddrMgr)(nil)

func (m mockAddrMgr) MinerList(ctx context.Context) ([]address.Address, error) {
//TODO implement me
panic("implement me")
}

func (m mockAddrMgr) Has(ctx context.Context, addr address.Address) bool {
return addr.String() == "t01043" || addr.String() == "t010938"
}
Expand All @@ -177,8 +172,11 @@ func (m mockAddrMgr) ActorList(ctx context.Context) ([]marketypes.User, error) {
panic("implement me")
}

func (m mockAddrMgr) GetMiners(ctx context.Context) ([]marketypes.User, error) {
//TODO implement me
func (m mockAddrMgr) ActorUpsert(_ context.Context, _ marketypes.User) (bool, error) {
panic("implement me")
}

func (m mockAddrMgr) ActorDelete(_ context.Context, _ address.Address) error {
panic("implement me")
}

Expand Down