From 91b228966e042d8fad36451d524bbf8b2abde690 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Mon, 17 Feb 2020 17:33:32 +0100 Subject: [PATCH] rpc: remove startup error for invalid modules, log it instead (#20684) This removes the error added in #20597 in favor of a log message at error level. Failing to start broke a bunch of people's setups and is probably not the right thing to do for this check. --- rpc/endpoints.go | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/rpc/endpoints.go b/rpc/endpoints.go index 2cf51aedfc..ed295adfc0 100644 --- a/rpc/endpoints.go +++ b/rpc/endpoints.go @@ -17,7 +17,6 @@ package rpc import ( - "fmt" "net" "github.com/ethereum/go-ethereum/log" @@ -25,30 +24,26 @@ import ( // checkModuleAvailability check that all names given in modules are actually // available API services. -func checkModuleAvailability(modules []string, apis []API) error { - available := make(map[string]struct{}) - var availableNames string - for i, api := range apis { - if _, ok := available[api.Namespace]; !ok { - available[api.Namespace] = struct{}{} - if i > 0 { - availableNames += ", " - } - availableNames += api.Namespace +func checkModuleAvailability(modules []string, apis []API) (bad, available []string) { + availableSet := make(map[string]struct{}) + for _, api := range apis { + if _, ok := availableSet[api.Namespace]; !ok { + availableSet[api.Namespace] = struct{}{} + available = append(available, api.Namespace) } } for _, name := range modules { - if _, ok := available[name]; !ok { - return fmt.Errorf("invalid API %q in whitelist (available: %s)", name, availableNames) + if _, ok := availableSet[name]; !ok { + bad = append(bad, name) } } - return nil + return bad, available } // StartHTTPEndpoint starts the HTTP RPC endpoint, configured with cors/vhosts/modules. func StartHTTPEndpoint(endpoint string, apis []API, modules []string, cors []string, vhosts []string, timeouts HTTPTimeouts) (net.Listener, *Server, error) { - if err := checkModuleAvailability(modules, apis); err != nil { - return nil, nil, err + if bad, available := checkModuleAvailability(modules, apis); len(bad) > 0 { + log.Error("Unavailable modules in HTTP API list", "unavailable", bad, "available", available) } // Generate the whitelist based on the allowed modules whitelist := make(map[string]bool) @@ -79,8 +74,8 @@ func StartHTTPEndpoint(endpoint string, apis []API, modules []string, cors []str // StartWSEndpoint starts a websocket endpoint. func StartWSEndpoint(endpoint string, apis []API, modules []string, wsOrigins []string, exposeAll bool) (net.Listener, *Server, error) { - if err := checkModuleAvailability(modules, apis); err != nil { - return nil, nil, err + if bad, available := checkModuleAvailability(modules, apis); len(bad) > 0 { + log.Error("Unavailable modules in WS API list", "unavailable", bad, "available", available) } // Generate the whitelist based on the allowed modules whitelist := make(map[string]bool)