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.
This commit is contained in:
Felix Lange 2020-02-17 17:33:32 +01:00 committed by GitHub
parent 1b9c5b393b
commit 91b228966e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -17,7 +17,6 @@
package rpc package rpc
import ( import (
"fmt"
"net" "net"
"github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/log"
@ -25,30 +24,26 @@ import (
// checkModuleAvailability check that all names given in modules are actually // checkModuleAvailability check that all names given in modules are actually
// available API services. // available API services.
func checkModuleAvailability(modules []string, apis []API) error { func checkModuleAvailability(modules []string, apis []API) (bad, available []string) {
available := make(map[string]struct{}) availableSet := make(map[string]struct{})
var availableNames string for _, api := range apis {
for i, api := range apis { if _, ok := availableSet[api.Namespace]; !ok {
if _, ok := available[api.Namespace]; !ok { availableSet[api.Namespace] = struct{}{}
available[api.Namespace] = struct{}{} available = append(available, api.Namespace)
if i > 0 {
availableNames += ", "
}
availableNames += api.Namespace
} }
} }
for _, name := range modules { for _, name := range modules {
if _, ok := available[name]; !ok { if _, ok := availableSet[name]; !ok {
return fmt.Errorf("invalid API %q in whitelist (available: %s)", name, availableNames) bad = append(bad, name)
} }
} }
return nil return bad, available
} }
// StartHTTPEndpoint starts the HTTP RPC endpoint, configured with cors/vhosts/modules. // 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) { 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 { if bad, available := checkModuleAvailability(modules, apis); len(bad) > 0 {
return nil, nil, err log.Error("Unavailable modules in HTTP API list", "unavailable", bad, "available", available)
} }
// Generate the whitelist based on the allowed modules // Generate the whitelist based on the allowed modules
whitelist := make(map[string]bool) whitelist := make(map[string]bool)
@ -79,8 +74,8 @@ func StartHTTPEndpoint(endpoint string, apis []API, modules []string, cors []str
// StartWSEndpoint starts a websocket endpoint. // StartWSEndpoint starts a websocket endpoint.
func StartWSEndpoint(endpoint string, apis []API, modules []string, wsOrigins []string, exposeAll bool) (net.Listener, *Server, error) { func StartWSEndpoint(endpoint string, apis []API, modules []string, wsOrigins []string, exposeAll bool) (net.Listener, *Server, error) {
if err := checkModuleAvailability(modules, apis); err != nil { if bad, available := checkModuleAvailability(modules, apis); len(bad) > 0 {
return nil, nil, err log.Error("Unavailable modules in WS API list", "unavailable", bad, "available", available)
} }
// Generate the whitelist based on the allowed modules // Generate the whitelist based on the allowed modules
whitelist := make(map[string]bool) whitelist := make(map[string]bool)