From 62e352ef887cfdfa8fbb9db339021a499bfd0e56 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Thu, 3 Mar 2022 16:45:11 +0100 Subject: [PATCH] move APIInfoEnvVars, RepoFlags, APIFlags under RepoType --- cli/auth.go | 3 +- cli/util/api.go | 65 ++---------------------------------- node/repo/fsrepo.go | 80 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 84 insertions(+), 64 deletions(-) diff --git a/cli/auth.go b/cli/auth.go index e6eeace89..caea4cb42 100644 --- a/cli/auth.go +++ b/cli/auth.go @@ -9,7 +9,6 @@ import ( "github.com/filecoin-project/go-jsonrpc/auth" "github.com/filecoin-project/lotus/api" - cliutil "github.com/filecoin-project/lotus/cli/util" "github.com/filecoin-project/lotus/node/repo" ) @@ -128,7 +127,7 @@ var AuthApiInfoToken = &cli.Command{ // TODO: Log in audit log when it is implemented - currentEnv, _, _ := cliutil.EnvsForAPIInfos(t) + currentEnv, _, _ := t.APIInfoEnvVars() fmt.Printf("%s=%s:%s\n", currentEnv, string(token), ainfo.Addr) return nil }, diff --git a/cli/util/api.go b/cli/util/api.go index 5283b8431..6c673d91f 100644 --- a/cli/util/api.go +++ b/cli/util/api.go @@ -28,63 +28,6 @@ const ( metadataTraceContext = "traceContext" ) -// flagsForAPI returns flags passed on the command line with the listen address -// of the API server (only used by the tests), in the order of precedence they -// should be applied for the requested kind of node. -func flagsForAPI(t repo.RepoType) []string { - switch t.Type() { - case "FullNode": - return []string{"api-url"} - case "StorageMiner": - return []string{"miner-api-url"} - case "Worker": - return []string{"worker-api-url"} - case "Markets": - // support split markets-miner and monolith deployments. - return []string{"markets-api-url", "miner-api-url"} - default: - panic(fmt.Sprintf("Unknown repo type: %v", t)) - } -} - -func flagsForRepo(t repo.RepoType) []string { - switch t.Type() { - case "FullNode": - return []string{"repo"} - case "StorageMiner": - return []string{"miner-repo"} - case "Worker": - return []string{"worker-repo"} - case "Markets": - // support split markets-miner and monolith deployments. - return []string{"markets-repo", "miner-repo"} - default: - panic(fmt.Sprintf("Unknown repo type: %v", t)) - } -} - -// EnvsForAPIInfos returns the environment variables to use in order of precedence -// to determine the API endpoint of the specified node type. -// -// It returns the current variables and deprecated ones separately, so that -// the user can log a warning when deprecated ones are found to be in use. -func EnvsForAPIInfos(t repo.RepoType) (primary string, fallbacks []string, deprecated []string) { - switch t.Type() { - case "FullNode": - return "FULLNODE_API_INFO", nil, nil - case "StorageMiner": - // TODO remove deprecated deprecation period - return "MINER_API_INFO", nil, []string{"STORAGE_API_INFO"} - case "Worker": - return "WORKER_API_INFO", nil, nil - case "Markets": - // support split markets-miner and monolith deployments. - return "MARKETS_API_INFO", []string{"MINER_API_INFO"}, nil - default: - panic(fmt.Sprintf("Unknown repo type: %v", t)) - } -} - // GetAPIInfo returns the API endpoint to use for the specified kind of repo. // // The order of precedence is as follows: @@ -96,8 +39,7 @@ func EnvsForAPIInfos(t repo.RepoType) (primary string, fallbacks []string, depre func GetAPIInfo(ctx *cli.Context, t repo.RepoType) (APIInfo, error) { // Check if there was a flag passed with the listen address of the API // server (only used by the tests) - apiFlags := flagsForAPI(t) - for _, f := range apiFlags { + for _, f := range t.APIFlags() { if !ctx.IsSet(f) { continue } @@ -111,7 +53,7 @@ func GetAPIInfo(ctx *cli.Context, t repo.RepoType) (APIInfo, error) { // Note: it is not correct/intuitive to prefer environment variables over // CLI flags (repo flags below). // - primaryEnv, fallbacksEnvs, deprecatedEnvs := EnvsForAPIInfos(t) + primaryEnv, fallbacksEnvs, deprecatedEnvs := t.APIInfoEnvVars() env, ok := os.LookupEnv(primaryEnv) if ok { return ParseApiInfo(env), nil @@ -125,8 +67,7 @@ func GetAPIInfo(ctx *cli.Context, t repo.RepoType) (APIInfo, error) { } } - repoFlags := flagsForRepo(t) - for _, f := range repoFlags { + for _, f := range t.RepoFlags() { // cannot use ctx.IsSet because it ignores default values path := ctx.String(f) if path == "" { diff --git a/node/repo/fsrepo.go b/node/repo/fsrepo.go index d8074e532..9688a518b 100644 --- a/node/repo/fsrepo.go +++ b/node/repo/fsrepo.go @@ -59,6 +59,20 @@ func NewRepoTypeFromString(t string) RepoType { type RepoType interface { Type() string Config() interface{} + + // APIFlags returns flags passed on the command line with the listen address + // of the API server (only used by the tests), in the order of precedence they + // should be applied for the requested kind of node. + APIFlags() []string + + RepoFlags() []string + + // APIInfoEnvVars returns the environment variables to use in order of precedence + // to determine the API endpoint of the specified node type. + // + // It returns the current variables and deprecated ones separately, so that + // the user can log a warning when deprecated ones are found to be in use. + APIInfoEnvVars() (string, []string, []string) } // SupportsStagingDeals is a trait for services that support staging deals @@ -79,6 +93,18 @@ func (fullNode) Config() interface{} { return config.DefaultFullNode() } +func (fullNode) APIFlags() []string { + return []string{"api-url"} +} + +func (fullNode) RepoFlags() []string { + return []string{"repo"} +} + +func (fullNode) APIInfoEnvVars() (primary string, fallbacks []string, deprecated []string) { + return "FULLNODE_API_INFO", nil, nil +} + var StorageMiner storageMiner type storageMiner struct{} @@ -93,10 +119,25 @@ func (storageMiner) Config() interface{} { return config.DefaultStorageMiner() } +func (storageMiner) APIFlags() []string { + return []string{"miner-api-url"} +} + +func (storageMiner) RepoFlags() []string { + return []string{"miner-repo"} +} + +func (storageMiner) APIInfoEnvVars() (primary string, fallbacks []string, deprecated []string) { + // TODO remove deprecated deprecation period + return "MINER_API_INFO", nil, []string{"STORAGE_API_INFO"} +} + var Markets markets type markets struct{} +func (markets) SupportsStagingDeals() {} + func (markets) Type() string { return "Markets" } @@ -105,6 +146,21 @@ func (markets) Config() interface{} { return config.DefaultStorageMiner() } +func (markets) APIFlags() []string { + // support split markets-miner and monolith deployments. + return []string{"markets-api-url", "miner-api-url"} +} + +func (markets) RepoFlags() []string { + // support split markets-miner and monolith deployments. + return []string{"markets-repo", "miner-repo"} +} + +func (markets) APIInfoEnvVars() (primary string, fallbacks []string, deprecated []string) { + // support split markets-miner and monolith deployments. + return "MARKETS_API_INFO", []string{"MINER_API_INFO"}, nil +} + type worker struct { } @@ -118,6 +174,18 @@ func (worker) Config() interface{} { return &struct{}{} } +func (worker) APIFlags() []string { + return []string{"worker-api-url"} +} + +func (worker) RepoFlags() []string { + return []string{"worker-repo"} +} + +func (worker) APIInfoEnvVars() (primary string, fallbacks []string, deprecated []string) { + return "WORKER_API_INFO", nil, nil +} + var Wallet wallet type wallet struct { @@ -131,6 +199,18 @@ func (wallet) Config() interface{} { return &struct{}{} } +func (wallet) APIFlags() []string { + panic("not supported") +} + +func (wallet) RepoFlags() []string { + panic("not supported") +} + +func (wallet) APIInfoEnvVars() (primary string, fallbacks []string, deprecated []string) { + panic("not supported") +} + var log = logging.Logger("repo") var ErrRepoExists = xerrors.New("repo exists")