Patch for concurrent iterator & others (onto v1.11.6) #386
@ -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
|
|
||||||
}
|
|
||||||
|
@ -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()
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user