diff --git a/p2p/simulations/network.go b/p2p/simulations/network.go index 521863d467..9ea6d5506e 100644 --- a/p2p/simulations/network.go +++ b/p2p/simulations/network.go @@ -116,7 +116,7 @@ func (net *Network) NewNodeWithConfig(conf *adapters.NodeConfig) (*Node, error) Node: adapterNode, Config: conf, } - log.Trace("Node created", "id", conf.ID) + log.Trace(fmt.Sprintf("node %v created", conf.ID)) net.nodeMap[conf.ID] = len(net.Nodes) net.Nodes = append(net.Nodes, node) @@ -167,7 +167,6 @@ func (net *Network) Start(id enode.ID) error { func (net *Network) startWithSnapshots(id enode.ID, snapshots map[string][]byte) error { net.lock.Lock() defer net.lock.Unlock() - node := net.getNode(id) if node == nil { return fmt.Errorf("node %v does not exist", id) @@ -175,13 +174,13 @@ func (net *Network) startWithSnapshots(id enode.ID, snapshots map[string][]byte) if node.Up { return fmt.Errorf("node %v already up", id) } - log.Trace("Starting node", "id", id, "adapter", net.nodeAdapter.Name()) + log.Trace(fmt.Sprintf("starting node %v: %v using %v", id, node.Up, net.nodeAdapter.Name())) if err := node.Start(snapshots); err != nil { - log.Warn("Node startup failed", "id", id, "err", err) + log.Warn(fmt.Sprintf("start up failed: %v", err)) return err } node.Up = true - log.Info("Started node", "id", id) + log.Info(fmt.Sprintf("started node %v: %v", id, node.Up)) net.events.Send(NewEvent(node)) @@ -210,6 +209,7 @@ func (net *Network) watchPeerEvents(id enode.ID, events chan *p2p.PeerEvent, sub defer net.lock.Unlock() node := net.getNode(id) if node == nil { + log.Error("Can not find node for id", "id", id) return } node.Up = false @@ -240,7 +240,7 @@ func (net *Network) watchPeerEvents(id enode.ID, events chan *p2p.PeerEvent, sub case err := <-sub.Err(): if err != nil { - log.Error("Error in peer event subscription", "id", id, "err", err) + log.Error(fmt.Sprintf("error getting peer events for node %v", id), "err", err) } return } @@ -250,6 +250,7 @@ func (net *Network) watchPeerEvents(id enode.ID, events chan *p2p.PeerEvent, sub // Stop stops the node with the given ID func (net *Network) Stop(id enode.ID) error { net.lock.Lock() + defer net.lock.Unlock() node := net.getNode(id) if node == nil { return fmt.Errorf("node %v does not exist", id) @@ -257,17 +258,12 @@ func (net *Network) Stop(id enode.ID) error { if !node.Up { return fmt.Errorf("node %v already down", id) } - node.Up = false - net.lock.Unlock() - - err := node.Stop() - if err != nil { - net.lock.Lock() - node.Up = true - net.lock.Unlock() + if err := node.Stop(); err != nil { return err } - log.Info("Stopped node", "id", id, "err", err) + node.Up = false + log.Info(fmt.Sprintf("stop node %v: %v", id, node.Up)) + net.events.Send(ControlEvent(node)) return nil } @@ -275,7 +271,7 @@ func (net *Network) Stop(id enode.ID) error { // Connect connects two nodes together by calling the "admin_addPeer" RPC // method on the "one" node so that it connects to the "other" node func (net *Network) Connect(oneID, otherID enode.ID) error { - log.Debug("Connecting nodes with addPeer", "id", oneID, "other", otherID) + log.Debug(fmt.Sprintf("connecting %s to %s", oneID, otherID)) conn, err := net.InitConn(oneID, otherID) if err != nil { return err @@ -485,10 +481,10 @@ func (net *Network) InitConn(oneID, otherID enode.ID) (*Conn, error) { err = conn.nodesUp() if err != nil { - log.Trace("Nodes not up", "err", err) + log.Trace(fmt.Sprintf("nodes not up: %v", err)) return nil, fmt.Errorf("nodes not up: %v", err) } - log.Debug("Connection initiated", "id", oneID, "other", otherID) + log.Debug("InitConn - connection initiated") conn.initiated = time.Now() return conn, nil } @@ -496,9 +492,9 @@ func (net *Network) InitConn(oneID, otherID enode.ID) (*Conn, error) { // Shutdown stops all nodes in the network and closes the quit channel func (net *Network) Shutdown() { for _, node := range net.Nodes { - log.Debug("Stopping node", "id", node.ID()) + log.Debug(fmt.Sprintf("stopping node %s", node.ID().TerminalString())) if err := node.Stop(); err != nil { - log.Warn("Can't stop node", "id", node.ID(), "err", err) + log.Warn(fmt.Sprintf("error stopping node %s", node.ID().TerminalString()), "err", err) } } close(net.quitc) @@ -656,7 +652,6 @@ func (net *Network) snapshot(addServices []string, removeServices []string) (*Sn defer net.lock.Unlock() snap := &Snapshot{ Nodes: make([]NodeSnapshot, len(net.Nodes)), - //Conns: make([]Conn, len(net.Conns)), } for i, node := range net.Nodes { snap.Nodes[i] = NodeSnapshot{Node: *node} @@ -671,19 +666,15 @@ func (net *Network) snapshot(addServices []string, removeServices []string) (*Sn for _, addSvc := range addServices { haveSvc := false for _, svc := range snap.Nodes[i].Node.Config.Services { - if svc == addSvc { haveSvc = true break } - } if !haveSvc { - log.Debug("addsvc in network", "addsvc", addSvc) snap.Nodes[i].Node.Config.Services = append(snap.Nodes[i].Node.Config.Services, addSvc) } } - log.Debug("nodeservices", "svc", snap.Nodes[i].Node.Config.Services) if len(removeServices) > 0 { var cleanedServices []string for _, svc := range snap.Nodes[i].Node.Config.Services { @@ -704,7 +695,6 @@ func (net *Network) snapshot(addServices []string, removeServices []string) (*Sn } for _, conn := range net.Conns { if conn.Up { - //snap.Conns[i] = *conn snap.Conns = append(snap.Conns, *conn) } } @@ -756,18 +746,18 @@ func (net *Network) Subscribe(events chan *Event) { } func (net *Network) executeControlEvent(event *Event) { - log.Trace("Executing control event", "type", event.Type, "event", event) + log.Trace("execute control event", "type", event.Type, "event", event) switch event.Type { case EventTypeNode: if err := net.executeNodeEvent(event); err != nil { - log.Error("Error executing node event", "event", event, "err", err) + log.Error("error executing node event", "event", event, "err", err) } case EventTypeConn: if err := net.executeConnEvent(event); err != nil { - log.Error("Error executing conn event", "event", event, "err", err) + log.Error("error executing conn event", "event", event, "err", err) } case EventTypeMsg: - log.Warn("Ignoring control msg event") + log.Warn("ignoring control msg event") } } diff --git a/swarm/network/simulations/discovery/discovery_test.go b/swarm/network/simulations/discovery/discovery_test.go index 6fac0c5497..29255e5fc5 100644 --- a/swarm/network/simulations/discovery/discovery_test.go +++ b/swarm/network/simulations/discovery/discovery_test.go @@ -126,6 +126,22 @@ func BenchmarkDiscovery_64_4(b *testing.B) { benchmarkDiscovery(b, 64, 4) } func BenchmarkDiscovery_128_4(b *testing.B) { benchmarkDiscovery(b, 128, 4) } func BenchmarkDiscovery_256_4(b *testing.B) { benchmarkDiscovery(b, 256, 4) } +func TestDiscoverySimulationDockerAdapter(t *testing.T) { + testDiscoverySimulationDockerAdapter(t, *nodeCount, *initCount) +} + +func testDiscoverySimulationDockerAdapter(t *testing.T, nodes, conns int) { + adapter, err := adapters.NewDockerAdapter() + if err != nil { + if err == adapters.ErrLinuxOnly { + t.Skip(err) + } else { + t.Fatal(err) + } + } + testDiscoverySimulation(t, nodes, conns, adapter) +} + func TestDiscoverySimulationExecAdapter(t *testing.T) { testDiscoverySimulationExecAdapter(t, *nodeCount, *initCount) } @@ -310,16 +326,12 @@ func discoverySimulation(nodes, conns int, adapter adapters.NodeAdapter) (*simul var err error var snap *simulations.Snapshot if len(*serviceOverride) > 0 { - log.Debug("fooooo") var addServices []string var removeServices []string for _, osvc := range strings.Split(*serviceOverride, ",") { - log.Debug("serviceoverride", "osc", osvc) if strings.Index(osvc, "+") == 0 { - log.Debug("add", "a", osvc) addServices = append(addServices, osvc[1:]) } else if strings.Index(osvc, "-") == 0 { - log.Debug("drop", "d", osvc) removeServices = append(removeServices, osvc[1:]) } } @@ -550,7 +562,8 @@ func triggerChecks(trigger chan enode.ID, net *simulations.Network, id enode.ID) } func newService(ctx *adapters.ServiceContext) (node.Service, error) { - addr := network.NewAddr(ctx.Config.Node()) + node := enode.NewV4(&ctx.Config.PrivateKey.PublicKey, adapters.ExternalIP(), int(ctx.Config.Port), int(ctx.Config.Port)) + addr := network.NewAddr(node) kp := network.NewKadParams() kp.MinProxBinSize = testMinProxBinSize