Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 2 additions & 9 deletions agreement/gossip/networkFull_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Comment thread
algonautshant marked this conversation as resolved.
if err != nil {
t.Fatalf("fail making ws node: %v", err)
}
Expand All @@ -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.
}

Expand Down
22 changes: 17 additions & 5 deletions cmd/algod/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Comment thread
algonautshant marked this conversation as resolved.
} 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)
Expand All @@ -260,10 +276,6 @@ func main() {
return
}

if peerOverrideArray != nil {
s.OverridePhonebook(peerOverrideArray...)
}

deadlockState := "enabled"
if deadlock.Opts.Disable {
deadlockState = "disabled"
Expand Down
10 changes: 5 additions & 5 deletions cmd/netdummy/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down
16 changes: 2 additions & 14 deletions daemon/algod/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -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()

Expand Down Expand Up @@ -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)
}
Expand Down Expand Up @@ -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...)
}
4 changes: 2 additions & 2 deletions network/phonebook.go
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
17 changes: 13 additions & 4 deletions network/wsNetwork.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
27 changes: 4 additions & 23 deletions node/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -140,25 +139,17 @@ 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
node.config = cfg
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
Expand Down Expand Up @@ -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 {
Expand Down
8 changes: 4 additions & 4 deletions node/node_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down Expand Up @@ -391,7 +391,7 @@ func connectPeers(nodes []*AlgorandFullNode) {
}

for _, node := range nodes {
node.ExtendPeerList(neighbors...)
// node.ExtendPeerList(neighbors...)
node.net.RequestConnectOutgoing(false, nil)
}
}
Expand All @@ -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)
}
}
Expand Down