Patch for concurrent iterator & others (onto v1.11.6) #386

Closed
roysc wants to merge 1565 commits from v1.11.6-statediff-v5 into master
2 changed files with 24 additions and 62 deletions
Showing only changes of commit 3630cafb34 - Show all commits

View File

@ -23,13 +23,11 @@ import (
"path/filepath" "path/filepath"
"runtime" "runtime"
"strings" "strings"
"sync"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/p2p"
"github.com/ethereum/go-ethereum/p2p/enode"
"github.com/ethereum/go-ethereum/rpc" "github.com/ethereum/go-ethereum/rpc"
) )
@ -194,8 +192,6 @@ type Config struct {
// Logger is a custom logger to use with the p2p.Server. // Logger is a custom logger to use with the p2p.Server.
Logger log.Logger `toml:",omitempty"` Logger log.Logger `toml:",omitempty"`
staticNodesWarning bool
trustedNodesWarning bool
oldGethResourceWarning bool oldGethResourceWarning bool
// AllowUnprotectedTxs allows non EIP-155 protected transactions to be send over RPC. // AllowUnprotectedTxs allows non EIP-155 protected transactions to be send over RPC.
@ -340,8 +336,9 @@ func (c *Config) ResolvePath(path string) string {
oldpath = filepath.Join(c.DataDir, path) oldpath = filepath.Join(c.DataDir, path)
} }
if oldpath != "" && common.FileExist(oldpath) { if oldpath != "" && common.FileExist(oldpath) {
if warn { if warn && !c.oldGethResourceWarning {
c.warnOnce(&c.oldGethResourceWarning, "Using deprecated resource file %s, please move this file to the 'geth' subdirectory of datadir.", oldpath) c.oldGethResourceWarning = true
log.Warn("Using deprecated resource file, please move this file to the 'geth' subdirectory of datadir.", "file", oldpath)
} }
return oldpath return oldpath
} }
@ -394,48 +391,35 @@ func (c *Config) NodeKey() *ecdsa.PrivateKey {
return key return key
} }
// StaticNodes returns a list of node enode URLs configured as static nodes. // CheckLegacyFiles inspects the datadir for signs of legacy static-nodes
func (c *Config) StaticNodes() []*enode.Node { // and trusted-nodes files. If they exist it raises an error.
return c.parsePersistentNodes(&c.staticNodesWarning, c.ResolvePath(datadirStaticNodes)) func (c *Config) checkLegacyFiles() {
c.checkLegacyFile(c.ResolvePath(datadirStaticNodes))
c.checkLegacyFile(c.ResolvePath(datadirTrustedNodes))
} }
// TrustedNodes returns a list of node enode URLs configured as trusted nodes. // checkLegacyFile will only raise an error if a file at the given path exists.
func (c *Config) TrustedNodes() []*enode.Node { func (c *Config) checkLegacyFile(path string) {
return c.parsePersistentNodes(&c.trustedNodesWarning, c.ResolvePath(datadirTrustedNodes))
}
// parsePersistentNodes parses a list of discovery node URLs loaded from a .json
// file from within the data directory.
func (c *Config) parsePersistentNodes(w *bool, path string) []*enode.Node {
// Short circuit if no node config is present // Short circuit if no node config is present
if c.DataDir == "" { if c.DataDir == "" {
return nil return
} }
if _, err := os.Stat(path); err != nil { if _, err := os.Stat(path); err != nil {
return nil return
} }
c.warnOnce(w, "Found deprecated node list file %s, please use the TOML config file instead.", path) logger := c.Logger
if logger == nil {
// Load the nodes from the config file. logger = log.Root()
var nodelist []string
if err := common.LoadJSON(path, &nodelist); err != nil {
log.Error(fmt.Sprintf("Can't load node list file: %v", err))
return nil
} }
// Interpret the list as a discovery node array switch fname := filepath.Base(path); fname {
var nodes []*enode.Node case "static-nodes.json":
for _, url := range nodelist { logger.Error("The static-nodes.json file is deprecated and ignored. Use P2P.StaticNodes in config.toml instead.")
if url == "" { case "trusted-nodes.json":
continue logger.Error("The trusted-nodes.json file is deprecated and ignored. Use P2P.TrustedNodes in config.toml instead.")
} default:
node, err := enode.Parse(enode.ValidSchemes, url) // We shouldn't wind up here, but better print something just in case.
if err != nil { logger.Error("Ignoring deprecated file.", "file", path)
log.Error(fmt.Sprintf("Node URL %s: %v\n", url, err))
continue
}
nodes = append(nodes, node)
} }
return nodes
} }
// KeyDirConfig determines the settings for keydirectory // KeyDirConfig determines the settings for keydirectory
@ -482,20 +466,3 @@ func getKeyStoreDir(conf *Config) (string, bool, error) {
return keydir, isEphemeral, nil return keydir, isEphemeral, nil
} }
var warnLock sync.Mutex
func (c *Config) warnOnce(w *bool, format string, args ...interface{}) {
warnLock.Lock()
defer warnLock.Unlock()
if *w {
return
}
l := c.Logger
if l == nil {
l = log.Root()
}
l.Warn(fmt.Sprintf(format, args...))
*w = true
}

View File

@ -133,12 +133,7 @@ func New(conf *Config) (*Node, error) {
node.server.Config.PrivateKey = node.config.NodeKey() node.server.Config.PrivateKey = node.config.NodeKey()
node.server.Config.Name = node.config.NodeName() node.server.Config.Name = node.config.NodeName()
node.server.Config.Logger = node.log node.server.Config.Logger = node.log
if node.server.Config.StaticNodes == nil { node.config.checkLegacyFiles()
node.server.Config.StaticNodes = node.config.StaticNodes()
}
if node.server.Config.TrustedNodes == nil {
node.server.Config.TrustedNodes = node.config.TrustedNodes()
}
if node.server.Config.NodeDatabase == "" { if node.server.Config.NodeDatabase == "" {
node.server.Config.NodeDatabase = node.config.NodeDB() node.server.Config.NodeDatabase = node.config.NodeDB()
} }