diff --git a/tests/v2/test_jsonrpc_waku.nim b/tests/v2/test_jsonrpc_waku.nim index 447299b4c..973d4e313 100644 --- a/tests/v2/test_jsonrpc_waku.nim +++ b/tests/v2/test_jsonrpc_waku.nim @@ -474,8 +474,8 @@ procSuite "Waku v2 JSON-RPC API": node3.mountRelay() # Dial nodes 2 and 3 from node1 - await node1.dialPeer(constructMultiaddrStr(peerInfo2)) - await node1.dialPeer(constructMultiaddrStr(peerInfo3)) + await node1.connectToNodes(@[constructMultiaddrStr(peerInfo2)]) + await node1.connectToNodes(@[constructMultiaddrStr(peerInfo3)]) # RPC server setup let diff --git a/vendor/nim-libbacktrace/vendor/libbacktrace-upstream/libtool b/vendor/nim-libbacktrace/vendor/libbacktrace-upstream/libtool index 6c1ebad80..4e0f6c06e 100755 --- a/vendor/nim-libbacktrace/vendor/libbacktrace-upstream/libtool +++ b/vendor/nim-libbacktrace/vendor/libbacktrace-upstream/libtool @@ -2,7 +2,7 @@ # libtool - Provide generalized library-building support services. # Generated automatically by config.status (libbacktrace) version-unused -# Libtool was configured on host fv-az272-202: +# Libtool was configured on host fv-az275-38: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, diff --git a/waku/v2/node/wakunode2.nim b/waku/v2/node/wakunode2.nim index 8ca23a2ac..67dd16630 100644 --- a/waku/v2/node/wakunode2.nim +++ b/waku/v2/node/wakunode2.nim @@ -41,9 +41,10 @@ when defined(rln): web3, ../protocol/waku_rln_relay/[rln, waku_rln_relay_utils] -declarePublicCounter waku_node_messages, "number of messages received", ["type"] +declarePublicCounter waku_node_messages, "number of messages received", ["type", "contentTopic"] declarePublicGauge waku_node_filters, "number of content filter subscriptions" declarePublicGauge waku_node_errors, "number of wakunode errors", ["type"] +declarePublicCounter waku_node_conns_initiated, "number of connections initiated by this node", ["source"] logScope: topics = "wakunode" @@ -251,7 +252,10 @@ proc subscribe(node: WakuNode, topic: Topic, handler: Option[TopicHandler]) = if (not node.wakuStore.isNil): await node.wakuStore.handleMessage(topic, msg.value()) - waku_node_messages.inc(labelValues = ["relay"]) + # Increase message counter + let ctLabel = if msg.value().contentTopic.len > 0: msg.value().contentTopic + else: "none" + waku_node_messages.inc(labelValues = ["relay", ctLabel]) let wakuRelay = node.wakuRelay @@ -433,7 +437,11 @@ proc mountFilter*(node: WakuNode, filterTimeout: Duration = WakuFilterTimeout) { info "push received" for message in msg.messages: node.filters.notify(message, requestId) # Trigger filter handlers on a light node - waku_node_messages.inc(labelValues = ["filter"]) + + # Increase message counter + let ctLabel = if message.contentTopic.len > 0: message.contentTopic + else: "none" + waku_node_messages.inc(labelValues = ["filter", ctLabel]) node.wakuFilter = WakuFilter.init(node.peerManager, node.rng, filterHandler, filterTimeout) node.switch.mount(node.wakuFilter, protocolMatcher(WakuFilterCodec)) @@ -721,15 +729,20 @@ proc startKeepalive*(node: WakuNode) = asyncSpawn node.keepaliveLoop(defaultKeepalive) ## Helpers -proc dialPeer*(n: WakuNode, address: string) {.async.} = - info "dialPeer", address = address - # XXX: This turns ipfs into p2p, not quite sure why - let remotePeer = parseRemotePeerInfo(address) - - info "Dialing peer", wireAddr = remotePeer.addrs[0], peerId = remotePeer.peerId +proc connectToNode(n: WakuNode, remotePeer: RemotePeerInfo, source = "api") {.async.} = + ## `source` indicates source of node addrs (static config, api call, discovery, etc) + info "Connecting to node", remotePeer = remotePeer, source = source + # NOTE This is dialing on WakuRelay protocol specifically - discard await n.peerManager.dialPeer(remotePeer, WakuRelayCodec) - info "Post peerManager dial" + info "Attempting dial", wireAddr = remotePeer.addrs[0], peerId = remotePeer.peerId + let connOpt = await n.peerManager.dialPeer(remotePeer, WakuRelayCodec) + + if connOpt.isSome(): + info "Successfully connected to peer", wireAddr = remotePeer.addrs[0], peerId = remotePeer.peerId + waku_node_conns_initiated.inc(labelValues = [source]) + else: + error "Failed to connect to peer", wireAddr = remotePeer.addrs[0], peerId = remotePeer.peerId + waku_node_errors.inc(labelValues = ["conn_init_failure"]) proc setStorePeer*(n: WakuNode, address: string) {.raises: [Defect, ValueError, LPError].} = info "Set store peer", address = address @@ -752,11 +765,12 @@ proc setLightPushPeer*(n: WakuNode, address: string) {.raises: [Defect, ValueErr n.wakuLightPush.setPeer(remotePeer) -proc connectToNodes*(n: WakuNode, nodes: seq[string]) {.async.} = +proc connectToNodes*(n: WakuNode, nodes: seq[string], source = "api") {.async.} = + ## `source` indicates source of node addrs (static config, api call, discovery, etc) + info "connectToNodes", len = nodes.len + for nodeId in nodes: - info "connectToNodes", node = nodeId - # XXX: This seems...brittle - await dialPeer(n, nodeId) + await connectToNode(n, parseRemotePeerInfo(nodeId), source) # The issue seems to be around peers not being fully connected when # trying to subscribe. So what we do is sleep to guarantee nodes are @@ -766,10 +780,12 @@ proc connectToNodes*(n: WakuNode, nodes: seq[string]) {.async.} = # later. await sleepAsync(5.seconds) -proc connectToNodes*(n: WakuNode, nodes: seq[RemotePeerInfo]) {.async.} = +proc connectToNodes*(n: WakuNode, nodes: seq[RemotePeerInfo], source = "api") {.async.} = + ## `source` indicates source of node addrs (static config, api call, discovery, etc) + info "connectToNodes", len = nodes.len + for remotePeerInfo in nodes: - info "connectToNodes", peer = remotePeerInfo - discard await n.peerManager.dialPeer(remotePeerInfo, WakuRelayCodec) + await connectToNode(n, remotePeerInfo, source) # The issue seems to be around peers not being fully connected when # trying to subscribe. So what we do is sleep to guarantee nodes are @@ -804,7 +820,7 @@ proc runDiscv5Loop(node: WakuNode) {.async.} = if newPeers.len > 0: debug "Connecting to newly discovered peers", count=newPeers.len() - await connectToNodes(node, newPeers) + await connectToNodes(node, newPeers, "discv5") # Discovery `queryRandom` can have a synchronous fast path for example # when no peers are in the routing table. Don't run it in continuous loop. @@ -1113,7 +1129,7 @@ when isMainModule: # Connect to configured static nodes if conf.staticnodes.len > 0: - waitFor connectToNodes(node, conf.staticnodes) + waitFor connectToNodes(node, conf.staticnodes, "static") # Connect to discovered nodes if conf.dnsDiscovery and conf.dnsDiscoveryUrl != "": @@ -1136,7 +1152,7 @@ when isMainModule: let discoveredPeers = wakuDnsDiscovery.get().findPeers() if discoveredPeers.isOk: info "Connecting to discovered peers" - waitFor connectToNodes(node, discoveredPeers.get()) + waitFor connectToNodes(node, discoveredPeers.get(), "dnsdisc") else: warn "Failed to init Waku DNS discovery"