diff --git a/agreement/gossip/networkFull_test.go b/agreement/gossip/networkFull_test.go index 43dd353487..dc68ab0731 100644 --- a/agreement/gossip/networkFull_test.go +++ b/agreement/gossip/networkFull_test.go @@ -60,11 +60,8 @@ func spinNetwork(t *testing.T, nodesCount int) ([]*networkImpl, []*messageCounte start := time.Now() nodesAddresses := []string{} gossipNodes := []network.GossipNode{} - phonebooks := make([]network.Phonebook, nodesCount) for nodeIdx := 0; nodeIdx < nodesCount; nodeIdx++ { - phonebooks[nodeIdx] = network.MakePhonebook(cfg.ConnectionsRateLimitingCount, - time.Duration(cfg.ConnectionsRateLimitingWindowSeconds)*time.Second) - gossipNode, err := network.NewWebsocketGossipNode(log.With("node", nodeIdx), cfg, phonebooks[nodeIdx], "go-test-agreement-network-genesis", config.Devtestnet) + gossipNode, err := network.NewWebsocketGossipNode(log.With("node", nodeIdx), cfg, nodesAddresses, "go-test-agreement-network-genesis", config.Devtestnet) if err != nil { t.Fatalf("fail making ws node: %v", err) } @@ -75,11 +72,7 @@ func spinNetwork(t *testing.T, nodesCount int) ([]*networkImpl, []*messageCounte gossipNodes = append(gossipNodes, gossipNode) } - for nodeIdx, gossipNode := range gossipNodes { - others := []string{} - others = append(others, nodesAddresses[nodeIdx+1:]...) - phonebooks[nodeIdx].ReplacePeerList(others, "") - log.Debugf("phonebook[%d] %#v", nodeIdx, others) + for _, gossipNode := range gossipNodes { gossipNode.RequestConnectOutgoing(false, nil) // no disconnect. } diff --git a/cmd/algod/main.go b/cmd/algod/main.go index eabab82e5a..f09ecbd2c0 100644 --- a/cmd/algod/main.go +++ b/cmd/algod/main.go @@ -249,7 +249,23 @@ func main() { log.Fatalf("DefaultDeadlock is somehow not set to an expected value (enable / disable): %s", config.DefaultDeadlock) } - err = s.Initialize(cfg) + var phonebookAddresses []string + if peerOverrideArray != nil { + phonebookAddresses = peerOverrideArray + } else { + ex, err := os.Executable() + if err != nil { + log.Errorf("cannot locate node executable: %s", err) + } else { + phonebookDir := filepath.Dir(ex) + phonebookAddresses, err = config.LoadPhonebook(phonebookDir) + if err != nil { + log.Debugf("Cannot load static phonebook: %v", err) + } + } + } + + err = s.Initialize(cfg, phonebookAddresses) if err != nil { fmt.Fprintln(os.Stderr, err) log.Error(err) @@ -260,10 +276,6 @@ func main() { return } - if peerOverrideArray != nil { - s.OverridePhonebook(peerOverrideArray...) - } - deadlockState := "enabled" if deadlock.Opts.Disable { deadlockState = "disabled" diff --git a/cmd/netdummy/main.go b/cmd/netdummy/main.go index 3ab97bba1c..648482dfa6 100644 --- a/cmd/netdummy/main.go +++ b/cmd/netdummy/main.go @@ -47,13 +47,13 @@ func main() { log.SetLevel(logging.Debug) log.SetOutput(os.Stderr) - addrs := network.MakePhonebook(conf.ConnectionsRateLimitingCount, - time.Duration(conf.ConnectionsRateLimitingWindowSeconds)*time.Second) - addrs.ReplacePeerList([]string{*serverAddress}, conf.DNSBootstrapID) - var nodes []network.GossipNode for i := 0; i < *numClients; i++ { - n, _ := network.NewWebsocketGossipNode(log, conf, addrs, *genesisID, protocol.NetworkID(*networkID)) + n, _ := network.NewWebsocketGossipNode(log, + conf, + []string{*serverAddress}, + *genesisID, + protocol.NetworkID(*networkID)) n.Start() nodes = append(nodes, n) } diff --git a/daemon/algod/server.go b/daemon/algod/server.go index 6437f6ce91..63ab8e51fb 100644 --- a/daemon/algod/server.go +++ b/daemon/algod/server.go @@ -59,7 +59,7 @@ type Server struct { } // Initialize creates a Node instance with applicable network services -func (s *Server) Initialize(cfg config.Local) error { +func (s *Server) Initialize(cfg config.Local, phonebookAddresses []string) error { // set up node s.log = logging.Base() @@ -119,13 +119,7 @@ func (s *Server) Initialize(cfg config.Local) error { NodeExporterPath: cfg.NodeExporterPath, }) - ex, err := os.Executable() - if err != nil { - return fmt.Errorf("cannot locate node executable: %s", err) - } - phonebookDir := filepath.Dir(ex) - - s.node, err = node.MakeFull(s.log, s.RootPath, cfg, phonebookDir, s.Genesis) + s.node, err = node.MakeFull(s.log, s.RootPath, cfg, phonebookAddresses, s.Genesis) if os.IsNotExist(err) { return fmt.Errorf("node has not been installed: %s", err) } @@ -272,9 +266,3 @@ func (s *Server) Stop() { os.Remove(s.netFile) os.Remove(s.netListenFile) } - -// OverridePhonebook is used to replace the phonebook associated with -// the server's node. -func (s *Server) OverridePhonebook(dialOverride ...string) { - s.node.ReplacePeerList(dialOverride...) -} diff --git a/network/phonebook.go b/network/phonebook.go index 77a8603dea..ad7db2dcec 100644 --- a/network/phonebook.go +++ b/network/phonebook.go @@ -134,8 +134,8 @@ func (e *phonebookImpl) filterRetryTime(t time.Time) []string { } // ReplacePeerList merges a set of addresses with that passed in. -// new entries in they are being added -// existing items that aren't included in they are being removed +// new entries in addressesThey are being added +// existing items that aren't included in addressesThey are being removed // matching entries don't change func (e *phonebookImpl) ReplacePeerList(addressesThey []string, networkName string) { e.lock.Lock() diff --git a/network/wsNetwork.go b/network/wsNetwork.go index 3b49fb4544..95e84cad54 100644 --- a/network/wsNetwork.go +++ b/network/wsNetwork.go @@ -1689,16 +1689,25 @@ func (wn *WebsocketNetwork) tryConnect(addr, gossipAddr string) { } // NewWebsocketNetwork constructor for websockets based gossip network -func NewWebsocketNetwork(log logging.Logger, config config.Local, phonebook Phonebook, genesisID string, networkID protocol.NetworkID) (wn *WebsocketNetwork, err error) { - wn = &WebsocketNetwork{log: log, config: config, phonebook: phonebook, GenesisID: genesisID, NetworkID: networkID} +func NewWebsocketNetwork(log logging.Logger, config config.Local, phonebookAddresses []string, genesisID string, networkID protocol.NetworkID) (wn *WebsocketNetwork, err error) { + phonebook := MakePhonebook(config.ConnectionsRateLimitingCount, + time.Duration(config.ConnectionsRateLimitingWindowSeconds)*time.Second) + phonebook.ReplacePeerList(phonebookAddresses, config.DNSBootstrapID) + wn = &WebsocketNetwork{ + log: log, + config: config, + phonebook: phonebook, + GenesisID: genesisID, + NetworkID: networkID, + } wn.setup() return wn, nil } // NewWebsocketGossipNode constructs a websocket network node and returns it as a GossipNode interface implementation -func NewWebsocketGossipNode(log logging.Logger, config config.Local, phonebook Phonebook, genesisID string, networkID protocol.NetworkID) (gn GossipNode, err error) { - return NewWebsocketNetwork(log, config, phonebook, genesisID, networkID) +func NewWebsocketGossipNode(log logging.Logger, config config.Local, phonebookAddresses []string, genesisID string, networkID protocol.NetworkID) (gn GossipNode, err error) { + return NewWebsocketNetwork(log, config, phonebookAddresses, genesisID, networkID) } // SetPrioScheme specifies the network priority scheme for a network node diff --git a/node/node.go b/node/node.go index 2ab11149f8..fdb68d19ab 100644 --- a/node/node.go +++ b/node/node.go @@ -84,9 +84,8 @@ type AlgorandFullNode struct { cancelCtx context.CancelFunc config config.Local - ledger *data.Ledger - net network.GossipNode - phonebook network.Phonebook + ledger *data.Ledger + net network.GossipNode transactionPool *pools.TransactionPool txHandler *data.TxHandler @@ -140,7 +139,7 @@ type TxnWithStatus struct { // MakeFull sets up an Algorand full node // (i.e., it returns a node that participates in consensus) -func MakeFull(log logging.Logger, rootDir string, cfg config.Local, phonebookDir string, genesis bookkeeping.Genesis) (*AlgorandFullNode, error) { +func MakeFull(log logging.Logger, rootDir string, cfg config.Local, phonebookAddresses []string, genesis bookkeeping.Genesis) (*AlgorandFullNode, error) { node := new(AlgorandFullNode) node.rootDir = rootDir @@ -148,17 +147,9 @@ func MakeFull(log logging.Logger, rootDir string, cfg config.Local, phonebookDir node.log = log.With("name", cfg.NetAddress) node.genesisID = genesis.ID() node.genesisHash = crypto.HashObj(genesis) - node.phonebook = network.MakePhonebook(cfg.ConnectionsRateLimitingCount, - time.Duration(cfg.ConnectionsRateLimitingWindowSeconds)*time.Second) - - addrs, err := config.LoadPhonebook(phonebookDir) - if err != nil { - log.Debugf("Cannot load static phonebook: %v", err) - } - node.phonebook.ReplacePeerList(addrs, node.config.DNSBootstrapID) // tie network, block fetcher, and agreement services together - p2pNode, err := network.NewWebsocketNetwork(node.log, node.config, node.phonebook, genesis.ID(), genesis.Network) + p2pNode, err := network.NewWebsocketNetwork(node.log, node.config, phonebookAddresses, genesis.ID(), genesis.Network) if err != nil { log.Errorf("could not create websocket node: %v", err) return nil, err @@ -593,16 +584,6 @@ func (node *AlgorandFullNode) PoolStats() PoolStats { } } -// ExtendPeerList dynamically adds a peer to a node's peer list. -func (node *AlgorandFullNode) ExtendPeerList(peers ...string) { - node.phonebook.ExtendPeerList(peers, node.config.DNSBootstrapID) -} - -// ReplacePeerList replaces the current peer list with a different one -func (node *AlgorandFullNode) ReplacePeerList(peers ...string) { - node.phonebook.ReplacePeerList(peers, node.config.DNSBootstrapID) -} - // SuggestedFee returns the suggested fee per byte recommended to ensure a new transaction is processed in a timely fashion. // Caller should set fee to max(MinTxnFee, SuggestedFee() * len(encoded SignedTxn)) func (node *AlgorandFullNode) SuggestedFee() basics.MicroAlgos { diff --git a/node/node_test.go b/node/node_test.go index cc6c9714ae..922e89d547 100644 --- a/node/node_test.go +++ b/node/node_test.go @@ -166,7 +166,7 @@ func setupFullNodes(t *testing.T, proto protocol.ConsensusVersion, verificationP cfg, err := config.LoadConfigFromDisk(rootDirectory) require.NoError(t, err) - node, err := MakeFull(logging.Base().With("source", t.Name()+strconv.Itoa(i)), rootDirectory, cfg, "", g) + node, err := MakeFull(logging.Base().With("source", t.Name()+strconv.Itoa(i)), rootDirectory, cfg, []string{}, g) nodes[i] = node require.NoError(t, err) } @@ -391,7 +391,7 @@ func connectPeers(nodes []*AlgorandFullNode) { } for _, node := range nodes { - node.ExtendPeerList(neighbors...) + // node.ExtendPeerList(neighbors...) node.net.RequestConnectOutgoing(false, nil) } } @@ -406,9 +406,9 @@ func delayStartNode(node *AlgorandFullNode, peers []*AlgorandFullNode, delay tim }() wg.Wait() - node0Addr := node.config.NetAddress + // node0Addr := node.config.NetAddress for _, peer := range peers { - peer.ExtendPeerList(node0Addr) + // peer.ExtendPeerList(node0Addr) peer.net.RequestConnectOutgoing(false, nil) } }