From fcd7e3263d77ff98d7ea97d0470fc1db352c6111 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=80=E9=A1=B5=E7=B4=A0=E4=B9=A6?= <2931107265@qq.com> Date: Thu, 24 Nov 2022 15:08:15 +0800 Subject: [PATCH] feat: unified run mode --- api/clients/modules.go | 10 +- api/clients/storage_miner.go | 1 + cmd/market-client/main.go | 2 +- cmd/venus-market/main.go | 44 +++---- cmd/venus-market/{pool-run.go => run.go} | 120 ++++++++++++++++--- cmd/venus-market/solo-run.go | 130 --------------------- cmd/venus-market/utils.go | 142 ----------------------- config/common.go | 8 +- config/def_config.go | 35 +++--- minermgr/miner_mgr.go | 104 +---------------- 10 files changed, 150 insertions(+), 446 deletions(-) rename cmd/venus-market/{pool-run.go => run.go} (58%) delete mode 100644 cmd/venus-market/solo-run.go delete mode 100644 cmd/venus-market/utils.go diff --git a/api/clients/modules.go b/api/clients/modules.go index d0218b8c..1910c1d1 100644 --- a/api/clients/modules.go +++ b/api/clients/modules.go @@ -23,7 +23,7 @@ func NewMarketEvent(mctx metrics.MetricsCtx) (gwAPI.IMarketEvent, error) { return stream, nil } -var ClientsOpts = func(server bool, mode string, msgCfg *config.Messager, signerCfg *config.Signer) builder.Option { +var ClientsOpts = func(server bool, msgCfg *config.Messager, signerCfg *config.Signer) builder.Option { opts := builder.Options( builder.Override(new(IMixMessage), NewMixMsgClient), builder.Override(new(signer.ISigner), signer.NewISignerClient(server)), @@ -37,13 +37,7 @@ var ClientsOpts = func(server bool, mode string, msgCfg *config.Messager, signer if server { return builder.Options(opts, builder.Override(new(v1api.FullNode), NodeClient), - - builder.ApplyIf( - func(s *builder.Settings) bool { - return mode == "solo" - }, - builder.Override(new(gwAPI.IMarketEvent), NewMarketEvent), - ), + builder.Override(new(gwAPI.IMarketEvent), NewMarketEvent), ) } diff --git a/api/clients/storage_miner.go b/api/clients/storage_miner.go index 74878f8e..dea2d37f 100644 --- a/api/clients/storage_miner.go +++ b/api/clients/storage_miner.go @@ -10,6 +10,7 @@ import ( "github.com/ipfs/go-cid" ) +// MarketRequestEvent todo no use type MarketRequestEvent interface { IsUnsealed(ctx context.Context, miner address.Address, pieceCid cid.Cid, sector storage.SectorRef, offset types.PaddedByteIndex, size abi.PaddedPieceSize) (bool, error) // SectorsUnsealPiece will Unseal a Sealed sector file for the given sector. diff --git a/cmd/market-client/main.go b/cmd/market-client/main.go index ba3b6290..c95ad7b3 100644 --- a/cmd/market-client/main.go +++ b/cmd/market-client/main.go @@ -274,7 +274,7 @@ func marketClient(cctx *cli.Context) error { config.ConfigClientOpts(cfg), - clients2.ClientsOpts(false, "", &cfg.Messager, &cfg.Signer), + clients2.ClientsOpts(false, &cfg.Messager, &cfg.Signer), models.DBOptions(false, nil), network.NetworkOpts(false, cfg.SimultaneousTransfersForStorage, 0, cfg.SimultaneousTransfersForRetrieval), paychmgr.PaychOpts, diff --git a/cmd/venus-market/main.go b/cmd/venus-market/main.go index dc4e1393..ecf7e48f 100644 --- a/cmd/venus-market/main.go +++ b/cmd/venus-market/main.go @@ -36,34 +36,31 @@ var ( Name: "node-url", Usage: "url to connect to daemon service", } - NodeTokenFlag = &cli.StringFlag{ - Name: "node-token", - Usage: "node token", - } AuthUrlFlag = &cli.StringFlag{ Name: "auth-url", Usage: "url to connect to auth service", } - AuthTokeFlag = &cli.StringFlag{ - Name: "auth-token", - Usage: "token for connect venus components", - } MessagerUrlFlag = &cli.StringFlag{ Name: "messager-url", Usage: "url to connect messager service", } - MessagerTokenFlag = &cli.StringFlag{ - Name: "messager-token", - Usage: "messager token", - Hidden: true, + + GatewayUrlFlag = &cli.StringFlag{ + Name: "gateway-url", + Usage: "used to connect gateway service for sign", + } + + ChainServiceTokenFlag = &cli.StringFlag{ + Name: "cs-token", + Usage: "chain service token", } SignerTypeFlag = &cli.StringFlag{ - Name: "signer-type", - Usage: "signer service type(lotusnode, wallet, gateway)", - Hidden: false, + Name: "signer-type", + Usage: "signer service type(lotusnode, wallet, gateway)", + Value: "wallet", } SignerUrlFlag = &cli.StringFlag{ Name: "signer-url", @@ -74,24 +71,10 @@ var ( Usage: "auth token for connect signer service", } - GatewayUrlFlag = &cli.StringFlag{ - Name: "gateway-url", - Usage: "used to connect gateway service for sign", - } - GatewayTokenFlag = &cli.StringFlag{ - Name: "gateway-token", - Usage: "used to connect gateway service for sign", - } - MysqlDsnFlag = &cli.StringFlag{ Name: "mysql-dsn", Usage: "mysql connection string", } - - RetrievalPaymentAddress = &cli.StringFlag{ - Name: "payment-addr", - Usage: "payment address for retrieval, eg. f01000", - } ) func main() { @@ -104,8 +87,7 @@ func main() { RepoFlag, }, Commands: []*cli.Command{ - soloRunCmd, - poolRunCmd, + runCmd, cli2.PiecesCmd, cli2.RetrievalDealsCmd, cli2.StorageDealsCmd, diff --git a/cmd/venus-market/pool-run.go b/cmd/venus-market/run.go similarity index 58% rename from cmd/venus-market/pool-run.go rename to cmd/venus-market/run.go index ed7deff8..4f407837 100644 --- a/cmd/venus-market/pool-run.go +++ b/cmd/venus-market/run.go @@ -2,6 +2,7 @@ package main import ( "fmt" + "os" "github.com/gorilla/mux" "github.com/urfave/cli/v2" @@ -15,6 +16,7 @@ import ( "github.com/filecoin-project/venus-market/v2/api/clients" "github.com/filecoin-project/venus-market/v2/api/impl" cli2 "github.com/filecoin-project/venus-market/v2/cli" + "github.com/filecoin-project/venus-market/v2/cmd" "github.com/filecoin-project/venus-market/v2/config" "github.com/filecoin-project/venus-market/v2/dagstore" "github.com/filecoin-project/venus-market/v2/fundmgr" @@ -34,32 +36,124 @@ import ( "github.com/filecoin-project/venus/venus-shared/api/permission" ) -var poolRunCmd = &cli.Command{ - Name: "pool-run", - Usage: "Run the market daemon in pool mode", +var runCmd = &cli.Command{ + Name: "run", + Usage: "Run the market daemon", Flags: []cli.Flag{ NodeUrlFlag, - NodeTokenFlag, AuthUrlFlag, - AuthTokeFlag, MessagerUrlFlag, - MessagerTokenFlag, GatewayUrlFlag, - GatewayTokenFlag, SignerTypeFlag, SignerUrlFlag, SignerTokenFlag, MysqlDsnFlag, - RetrievalPaymentAddress, }, - Action: poolDaemon, + Action: runDaemon, } -func poolDaemon(cctx *cli.Context) error { +func flagData(cctx *cli.Context, cfg *config.MarketConfig) error { + if cctx.IsSet(NodeUrlFlag.Name) { + cfg.Node.Url = cctx.String(NodeUrlFlag.Name) + } + + if cctx.IsSet(AuthUrlFlag.Name) { + cfg.AuthNode.Url = cctx.String(AuthUrlFlag.Name) + } + + if cctx.IsSet(MessagerUrlFlag.Name) { + cfg.Messager.Url = cctx.String(MessagerUrlFlag.Name) + } + + // chain service token + if cctx.IsSet(ChainServiceTokenFlag.Name) { + csToken := cctx.String(ChainServiceTokenFlag.Name) + cfg.Node.Token = csToken + cfg.Messager.Token = csToken + cfg.AuthNode.Token = csToken + } + + signerType := cctx.String(SignerTypeFlag.Name) + switch signerType { + case config.SignerTypeGateway: + if cctx.IsSet(GatewayUrlFlag.Name) { + cfg.Signer.Url = cctx.String(GatewayUrlFlag.Name) + } + + if cctx.IsSet(ChainServiceTokenFlag.Name) { + cfg.Signer.Token = cctx.String(ChainServiceTokenFlag.Name) + } + case config.SignerTypeWallet: + if cctx.IsSet(GatewayUrlFlag.Name) { + cfg.Signer.Url = cctx.String(SignerUrlFlag.Name) + } + + if cctx.IsSet(SignerTokenFlag.Name) { + cfg.Signer.Token = cctx.String(SignerTokenFlag.Name) + } + case config.SignerTypeLotusnode: + if cctx.IsSet(NodeUrlFlag.Name) { + cfg.Signer.Url = cctx.String(NodeUrlFlag.Name) + } + if cctx.IsSet(ChainServiceTokenFlag.Name) { + cfg.Signer.Token = cctx.String(ChainServiceTokenFlag.Name) + } + default: + return fmt.Errorf("unsupport signer type %s", signerType) + } + cfg.Signer.SignerType = signerType + + if cctx.IsSet(MysqlDsnFlag.Name) { + cfg.Mysql.ConnectionString = cctx.String(MysqlDsnFlag.Name) + } + + return nil +} + +func prepare(cctx *cli.Context) (*config.MarketConfig, error) { + cfg := config.DefaultMarketConfig + cfg.HomeDir = cctx.String(RepoFlag.Name) + cfgPath, err := cfg.ConfigPath() + if err != nil { + return nil, err + } + + mainLog.Info("load config from path ", cfgPath) + if _, err := os.Stat(cfgPath); os.IsNotExist(err) { + //create + err = flagData(cctx, cfg) + if err != nil { + return nil, fmt.Errorf("parser data from flag: %w", err) + } + + err = config.SaveConfig(cfg) + if err != nil { + return nil, fmt.Errorf("save config to %s: %w", cfgPath, err) + } + } else if err == nil { + //loadConfig + err = config.LoadConfig(cfgPath, cfg) + if err != nil { + return nil, err + } + + err = flagData(cctx, cfg) + if err != nil { + return nil, fmt.Errorf("parser data from flag: %w", err) + } + } else { + return nil, err + } + + return cfg, cmd.FetchAndLoadBundles(cctx.Context, cfg.Node) +} + +func runDaemon(cctx *cli.Context) error { utils.SetupLogLevels() - cfg, err := prepare(cctx, config.SignerTypeGateway) + + cfg, err := prepare(cctx) if err != nil { - return fmt.Errorf("prepare pool run failed:%w", err) + return fmt.Errorf("prepare run failed: %w", err) } // Configuration sanity check @@ -98,7 +192,7 @@ func poolDaemon(cctx *cli.Context) error { minermgr.MinerMgrOpts(), // clients - clients.ClientsOpts(true, "pool", &cfg.Messager, &cfg.Signer), + clients.ClientsOpts(true, &cfg.Messager, &cfg.Signer), models.DBOptions(true, &cfg.Mysql), network.NetworkOpts(true, cfg.SimultaneousTransfersForRetrieval, cfg.SimultaneousTransfersForStoragePerClient, cfg.SimultaneousTransfersForStorage), piecestorage.PieceStorageOpts(&cfg.PieceStorage), diff --git a/cmd/venus-market/solo-run.go b/cmd/venus-market/solo-run.go deleted file mode 100644 index a7909e84..00000000 --- a/cmd/venus-market/solo-run.go +++ /dev/null @@ -1,130 +0,0 @@ -package main - -import ( - "fmt" - - "go.uber.org/fx" - - "github.com/gorilla/mux" - "github.com/urfave/cli/v2" - - "github.com/ipfs-force-community/venus-common-utils/builder" - "github.com/ipfs-force-community/venus-common-utils/journal" - - "github.com/filecoin-project/venus-market/v2/api/clients" - "github.com/filecoin-project/venus-market/v2/api/impl" - cli2 "github.com/filecoin-project/venus-market/v2/cli" - "github.com/filecoin-project/venus-market/v2/config" - "github.com/filecoin-project/venus-market/v2/dagstore" - "github.com/filecoin-project/venus-market/v2/fundmgr" - "github.com/filecoin-project/venus-market/v2/metrics" - "github.com/filecoin-project/venus-market/v2/minermgr" - "github.com/filecoin-project/venus-market/v2/models" - "github.com/filecoin-project/venus-market/v2/network" - "github.com/filecoin-project/venus-market/v2/paychmgr" - "github.com/filecoin-project/venus-market/v2/piecestorage" - "github.com/filecoin-project/venus-market/v2/retrievalprovider" - "github.com/filecoin-project/venus-market/v2/rpc" - "github.com/filecoin-project/venus-market/v2/storageprovider" - types2 "github.com/filecoin-project/venus-market/v2/types" - "github.com/filecoin-project/venus-market/v2/utils" - - "github.com/filecoin-project/venus-auth/jwtclient" - - marketapi "github.com/filecoin-project/venus/venus-shared/api/market" - "github.com/filecoin-project/venus/venus-shared/api/permission" -) - -var soloRunCmd = &cli.Command{ - Name: "solo-run", - Usage: "Run the market daemon in solo mode", - Flags: []cli.Flag{ - NodeUrlFlag, - NodeTokenFlag, - SignerTypeFlag, - SignerUrlFlag, - SignerTokenFlag, - MysqlDsnFlag, - RetrievalPaymentAddress, - }, - Action: soloDaemon, -} - -func soloDaemon(cctx *cli.Context) error { - utils.SetupLogLevels() - - cfg, err := prepare(cctx, config.SignerTypeWallet) - if err != nil { - return fmt.Errorf("prepare solo run failed: %w", err) - } - - // Configuration sanity check - if len(cfg.AuthNode.Url) > 0 { - return fmt.Errorf("solo mode does not need to configure auth node") - } - - if len(cfg.Signer.Url) == 0 { - return fmt.Errorf("the signer node must be configured") - } - - ctx := cctx.Context - - resAPI := &impl.MarketNodeImpl{} - shutdownChan := make(chan struct{}) - closeFunc, err := builder.New(ctx, - builder.Override(new(journal.DisabledEvents), journal.EnvDisabledEvents), - builder.Override(new(journal.Journal), func(lc fx.Lifecycle, home config.IHome, disabled journal.DisabledEvents) (journal.Journal, error) { - return journal.OpenFilesystemJournal(lc, home.MustHomePath(), "venus-market", disabled) - }), - - metrics.MetricsOpts("venus-market", &cfg.Metrics), - builder.Override(new(types2.ShutdownChan), shutdownChan), - - // override marketconfig - builder.Override(new(config.MarketConfig), cfg), - - // config - config.ConfigServerOpts(cfg), - - // 'solo' mode doesn't needs a 'AuthClient' of venus-auth, - // provide a nil 'AuthClient', just for making 'NewUserMgrImpl' happy - builder.Override(new(*jwtclient.AuthClient), func() *jwtclient.AuthClient { return nil }), - - // user manager - minermgr.MinerMgrOpts(), - - // clients - clients.ClientsOpts(true, "solo", &cfg.Messager, &cfg.Signer), - models.DBOptions(true, &cfg.Mysql), - network.NetworkOpts(true, cfg.SimultaneousTransfersForRetrieval, cfg.SimultaneousTransfersForStoragePerClient, cfg.SimultaneousTransfersForStorage), - piecestorage.PieceStorageOpts(&cfg.PieceStorage), - fundmgr.FundMgrOpts, - dagstore.DagstoreOpts, - paychmgr.PaychOpts, - // Markets - storageprovider.StorageProviderOpts(cfg), - retrievalprovider.RetrievalProviderOpts(cfg), - - func(s *builder.Settings) error { - s.Invokes[ExtractApiKey] = builder.InvokeOption{ - Priority: 10, - Option: fx.Populate(resAPI), - } - return nil - }, - ) - if err != nil { - return fmt.Errorf("initializing node: %w", err) - } - defer closeFunc(ctx) //nolint - - finishCh := utils.MonitorShutdown(shutdownChan) - - router := mux.NewRouter() - router.Handle("resource", rpc.NewPieceStorageServer(resAPI.PieceStorageMgr)) - - var fullAPI marketapi.IMarketStruct - permission.PermissionProxy(marketapi.IMarket(resAPI), &fullAPI) - - return rpc.ServeRPC(ctx, cfg, &cfg.API, router, 1000, cli2.API_NAMESPACE_VENUS_MARKET, nil, &fullAPI, finishCh) -} diff --git a/cmd/venus-market/utils.go b/cmd/venus-market/utils.go deleted file mode 100644 index a5cbfcee..00000000 --- a/cmd/venus-market/utils.go +++ /dev/null @@ -1,142 +0,0 @@ -package main - -import ( - "fmt" - "os" - - "github.com/urfave/cli/v2" - - "github.com/filecoin-project/go-address" - - "github.com/filecoin-project/venus-market/v2/cmd" - "github.com/filecoin-project/venus-market/v2/config" -) - -func flagData(cctx *cli.Context, cfg *config.MarketConfig) error { - if cctx.IsSet(NodeUrlFlag.Name) { - cfg.Node.Url = cctx.String(NodeUrlFlag.Name) - } - - if cctx.IsSet(MessagerUrlFlag.Name) { - cfg.Messager.Url = cctx.String(MessagerUrlFlag.Name) - } - - if cctx.IsSet(AuthUrlFlag.Name) { - cfg.AuthNode.Url = cctx.String(AuthUrlFlag.Name) - } - - signerType := cctx.String(SignerTypeFlag.Name) - switch signerType { - case config.SignerTypeGateway: - { - if cctx.IsSet(GatewayUrlFlag.Name) { - cfg.Signer.Url = cctx.String(GatewayUrlFlag.Name) - } - if cctx.IsSet(GatewayTokenFlag.Name) { - cfg.Signer.Token = cctx.String(GatewayTokenFlag.Name) - } - } - case config.SignerTypeWallet: - { - if cctx.IsSet(SignerUrlFlag.Name) { - cfg.Signer.Url = cctx.String(SignerUrlFlag.Name) - } - if cctx.IsSet(SignerTokenFlag.Name) { - cfg.Signer.Token = cctx.String(SignerTokenFlag.Name) - } - } - case config.SignerTypeLotusnode: - { - if cctx.IsSet(NodeUrlFlag.Name) { - cfg.Signer.Url = cctx.String(NodeUrlFlag.Name) - } - if cctx.IsSet(NodeTokenFlag.Name) { - cfg.Signer.Token = cctx.String(NodeTokenFlag.Name) - } - } - default: - return fmt.Errorf("unsupport signer type %s", signerType) - } - cfg.Signer.SignerType = signerType - - if cctx.IsSet(AuthTokeFlag.Name) { - cfg.Node.Token = cctx.String(AuthTokeFlag.Name) - - if len(cfg.AuthNode.Url) > 0 { - cfg.AuthNode.Token = cctx.String(AuthTokeFlag.Name) - } - - if len(cfg.Messager.Url) > 0 { - cfg.Messager.Token = cctx.String(AuthTokeFlag.Name) - } - - if len(cfg.Signer.Url) > 0 { - cfg.Signer.Token = cctx.String(AuthTokeFlag.Name) - } - } - - if cctx.IsSet(NodeTokenFlag.Name) { - cfg.Node.Token = cctx.String(NodeTokenFlag.Name) - } - if cctx.IsSet(MessagerTokenFlag.Name) { - cfg.Messager.Token = cctx.String(MessagerTokenFlag.Name) - } - - if cctx.IsSet(MysqlDsnFlag.Name) { - cfg.Mysql.ConnectionString = cctx.String(MysqlDsnFlag.Name) - } - - if cctx.IsSet(RetrievalPaymentAddress.Name) { - addrStr := cctx.String(RetrievalPaymentAddress.Name) - addr, err := address.NewFromString(addrStr) - if err != nil { - return fmt.Errorf("flag provide a wrong address %s %w", addrStr, err) - } - - cfg.RetrievalPaymentAddress = config.Address(addr) - } - return nil -} - -func prepare(cctx *cli.Context, defSignerType config.SignerType) (*config.MarketConfig, error) { - if !cctx.IsSet(SignerTypeFlag.Name) { - if err := cctx.Set(SignerTypeFlag.Name, defSignerType); err != nil { - return nil, fmt.Errorf("set `%s` with wallet failed %w", SignerTypeFlag.Name, err) - } - } - cfg := config.DefaultMarketConfig - cfg.HomeDir = cctx.String(RepoFlag.Name) - cfgPath, err := cfg.ConfigPath() - if err != nil { - return nil, err - } - - mainLog.Info("load config from path ", cfgPath) - if _, err := os.Stat(cfgPath); os.IsNotExist(err) { - //create - err = flagData(cctx, cfg) - if err != nil { - return nil, fmt.Errorf("parser data from flag %w", err) - } - - err = config.SaveConfig(cfg) - if err != nil { - return nil, fmt.Errorf("save config to %s %w", cfgPath, err) - } - } else if err == nil { - //loadConfig - err = config.LoadConfig(cfgPath, cfg) - if err != nil { - return nil, err - } - - err = flagData(cctx, cfg) - if err != nil { - return nil, fmt.Errorf("parser data from flag %w", err) - } - } else { - return nil, err - } - - return cfg, cmd.FetchAndLoadBundles(cctx.Context, cfg.Node) -} diff --git a/config/common.go b/config/common.go index 0510b8ac..745365d1 100644 --- a/config/common.go +++ b/config/common.go @@ -37,7 +37,7 @@ type Common struct { Libp2p Libp2p } -// chain-service connect config +// ConnectConfig chain-service connect config type ConnectConfig struct { Url string Token string @@ -46,11 +46,9 @@ type ConnectConfig struct { type ( Node ConnectConfig Messager ConnectConfig - Market ConnectConfig AuthNode ConnectConfig ) -// signer config type SignerType = string const ( @@ -60,12 +58,12 @@ const ( ) type Signer struct { - SignerType SignerType `toml:"Type"` // wallet/gateway + SignerType SignerType `toml:"Type"` Url string Token string } -// common config for provider +// ProviderConfig is common config for provider type ProviderConfig struct { // When enabled, the miner can accept online deals ConsiderOnlineStorageDeals bool diff --git a/config/def_config.go b/config/def_config.go index fe087248..b7c81d35 100644 --- a/config/def_config.go +++ b/config/def_config.go @@ -31,20 +31,21 @@ var DefaultMarketConfig = &MarketConfig{ }, }, Node: Node{ - Url: "", // "/ip4//tcp/3453", - Token: "", + Url: "/ip4//tcp/3453", + Token: "", }, Messager: Messager{ - Url: "", // /ip4//tcp/39812 - Token: "", - }, - Signer: Signer{ - Url: "", // /ip4//tcp/5678 - Token: "", + Url: "/ip4//tcp/39812", + Token: "", }, AuthNode: AuthNode{ - Url: "", // "http://:8989", - Token: "", + Url: "http://:8989", + Token: "", + }, + Signer: Signer{ + SignerType: "wallet", + Url: "/ip4//tcp/5678", + Token: "", }, Mysql: Mysql{ ConnectionString: "", @@ -73,7 +74,7 @@ var DefaultMarketConfig = &MarketConfig{ } var DefaultMarketClientConfig = &MarketClientConfig{ - Home: Home{"~/.venusclient"}, + Home: Home{"~/.marketclient"}, Common: Common{ API: API{ ListenAddress: "/ip4/127.0.0.1/tcp/41231/ws", @@ -89,16 +90,16 @@ var DefaultMarketClientConfig = &MarketClientConfig{ }, }, Node: Node{ - Url: "", // "/ip4//tcp/3453", - Token: "", + Url: "/ip4//tcp/3453", + Token: "", }, Signer: Signer{ - Url: "", // "/ip4//tcp/5678", - Token: "", + Url: "/ip4//tcp/5678", + Token: "", }, Messager: Messager{ - Url: "", // "/ip4//tcp/39812", - Token: "", + Url: "/ip4//tcp/39812", + Token: "", }, DefaultMarketAddress: Address(address.Undef), SimultaneousTransfersForStorage: DefaultSimultaneousTransfers, diff --git a/minermgr/miner_mgr.go b/minermgr/miner_mgr.go index 4fcd9f73..6223d318 100644 --- a/minermgr/miner_mgr.go +++ b/minermgr/miner_mgr.go @@ -3,55 +3,31 @@ package minermgr import ( "context" "sync" - "time" - - logging "github.com/ipfs/go-log/v2" "github.com/ipfs-force-community/metrics" "github.com/filecoin-project/go-address" - "github.com/filecoin-project/venus-auth/auth" - "github.com/filecoin-project/venus-auth/core" - "github.com/filecoin-project/venus-auth/jwtclient" - "github.com/filecoin-project/venus-market/v2/config" "github.com/filecoin-project/venus/venus-shared/types/market" ) -const CoMinersLimit = 500 - -var log = logging.Logger("user-manager") - type MinerMgrImpl struct { - authClient *jwtclient.AuthClient - authNode config.AuthNode - miners map[address.Address]*market.User lk sync.Mutex - - localMiners map[address.Address]*market.User } var _ IMinerMgr = (*MinerMgrImpl)(nil) -func NewMinerMgrImpl(ctx metrics.MetricsCtx, authClient *jwtclient.AuthClient, cfg *config.MarketConfig) (IMinerMgr, error) { +func NewMinerMgrImpl(_ metrics.MetricsCtx, cfg *config.MarketConfig) (IMinerMgr, error) { m := &MinerMgrImpl{ - authClient: authClient, - authNode: cfg.AuthNode, - - miners: make(map[address.Address]*market.User), - localMiners: make(map[address.Address]*market.User), + miners: make(map[address.Address]*market.User), } // storage miner for _, miner := range cfg.Miners { - m.localMiners[address.Address(miner.Addr)] = &market.User{Addr: address.Address(miner.Addr), Account: miner.Account} - } - - if authClient != nil { - go m.refreshUsers(ctx) + m.miners[address.Address(miner.Addr)] = &market.User{Addr: address.Address(miner.Addr), Account: miner.Account} } return m, nil @@ -66,14 +42,10 @@ func (m *MinerMgrImpl) MinerList(context.Context) ([]address.Address, error) { miners = append(miners, miner) } - for miner := range m.localMiners { - miners = append(miners, miner) - } - return miners, nil } -func (m *MinerMgrImpl) ActorList(ctx context.Context) ([]market.User, error) { +func (m *MinerMgrImpl) ActorList(_ context.Context) ([]market.User, error) { m.lk.Lock() defer m.lk.Unlock() @@ -82,79 +54,13 @@ func (m *MinerMgrImpl) ActorList(ctx context.Context) ([]market.User, error) { users = append(users, market.User{Addr: user.Addr, Account: user.Account}) } - for _, user := range m.localMiners { - users = append(users, market.User{Addr: user.Addr, Account: user.Account}) - } - return users, nil } -func (m *MinerMgrImpl) Has(ctx context.Context, mAddr address.Address) bool { +func (m *MinerMgrImpl) Has(_ context.Context, mAddr address.Address) bool { m.lk.Lock() defer m.lk.Unlock() _, ok := m.miners[mAddr] - if ok { - return ok - } - - _, ok = m.localMiners[mAddr] return ok } - -func (m *MinerMgrImpl) getMinerFromVenusAuth(ctx context.Context, skip, limit int64) error { - m.lk.Lock() - defer m.lk.Unlock() - - if m.authClient == nil { - return nil - } - - if limit == 0 { - limit = CoMinersLimit - } - - usersWithMiners, err := m.authClient.ListUsersWithMiners(&auth.ListUsersRequest{ - Page: &core.Page{Skip: skip, Limit: limit}, - State: int(core.UserStateEnabled), - }) - if err != nil { - return err - } - - // To avoid some deleted or disabled ones that cannot be removed, re-add them here - m.miners = make(map[address.Address]*market.User) - - for _, u := range usersWithMiners { - for _, miner := range u.Miners { - addr, err := address.NewFromString(miner.Miner) - if err != nil { - log.Warnf("invalid miner: %s in user: %s", miner.Miner, u.Name) - continue - } - - if _, ok := m.miners[addr]; !ok { - m.miners[addr] = &market.User{Addr: addr, Account: u.Name} - } - } - } - - return nil -} - -func (m *MinerMgrImpl) refreshUsers(ctx context.Context) { - if err := m.getMinerFromVenusAuth(ctx, 0, 0); err != nil { - log.Errorf("first sync users from venus-auth(%s) failed: %s", m.authNode.Url, err) - } - - tm := time.NewTicker(time.Minute) - defer tm.Stop() - - for range tm.C { - log.Infof("sync users from venus-auth, url: %s\n", m.authNode.Url) - - if err := m.getMinerFromVenusAuth(ctx, 0, 0); err != nil { - log.Errorf("users from venus-auth(%s) failed:%s", m.authNode.Url, err.Error()) - } - } -}