From e349568833025b217bb4c493ebc93231ac127372 Mon Sep 17 00:00:00 2001 From: Arnaud Date: Wed, 15 Apr 2026 09:17:45 +0400 Subject: [PATCH] Add bootstrap nodes connect --- storage/storage.nim | 13 +++++++++++-- tests/integration/1_minute/testnat.nim | 19 ++++--------------- 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/storage/storage.nim b/storage/storage.nim index 0b3f08e7..eb8a3fe7 100644 --- a/storage/storage.nim +++ b/storage/storage.nim @@ -39,6 +39,7 @@ import ./namespaces import ./storagetypes import ./logutils import ./nat +import ./utils/natutils logScope: topics = "storage node" @@ -95,7 +96,7 @@ proc start*(s: StorageServer) {.async.} = .deduplicate() let discoveryAddrs = @[getMultiAddrWithIPAndUDPPort(announceIp.get, s.config.discoveryPort)] - s.storageNode.discovery.updateDhtRecord(discoveryAddrs) + s.storageNode.discovery.updateDhtRecord(announceAddrs & discoveryAddrs) s.storageNode.discovery.updateAnnounceRecord(announceAddrs) var hasPublicAddr = false @@ -110,6 +111,14 @@ proc start*(s: StorageServer) {.async.} = await s.storageNode.start() + for spr in s.config.bootstrapNodes: + try: + let addrs = spr.data.addresses.mapIt(it.address) + await s.storageNode.switch.connect(spr.data.peerId, addrs) + except CatchableError as e: + warn "Cannot connect to bootstrap node", error = e.msg + discard + if s.restServer != nil: s.restServer.start() @@ -337,7 +346,7 @@ proc new*( let (announceAddrs, discoveryAddrs) = nattedAddress(config.nat, switch.peerInfo.addrs, config.discoveryPort) discovery.updateAnnounceRecord(announceAddrs) - discovery.updateDhtRecord(discoveryAddrs) + discovery.updateDhtRecord(announceAddrs & discoveryAddrs) ) StorageServer( diff --git a/tests/integration/1_minute/testnat.nim b/tests/integration/1_minute/testnat.nim index d7b9288f..4aa13bce 100644 --- a/tests/integration/1_minute/testnat.nim +++ b/tests/integration/1_minute/testnat.nim @@ -16,8 +16,9 @@ multinodesuite "AutoNAT integration": .withNatMinConfidence(0.5) .withNatScheduleInterval(10.seconds) .withNatMaxQueueSize(1) - .withLogFile() - .withLogLevel("DEBUG").some + # .withLogFile() + # .withLogLevel("DEBUG") + .some ) # Reminder: multinodesuite setup the first node as bootstrap node @@ -25,20 +26,8 @@ multinodesuite "AutoNAT integration": let node1 = clients()[0] let node2 = clients()[1] - # Temporary - # DHT exposes only UDP information - # So we force temporary by connection the 2 node together - # to update the autonat reachability - let info = await node2.client.info() - - check not info.isErr - - await node1.client.connectPeer( - info.get()["id"].getStr(), info.get()["addrs"].getElems().mapIt(it.getStr()) - ) - check eventuallySafe( - (await node1.client.natReachability()).get() == "Reachable", + (await node2.client.natReachability()).get() == "Reachable", timeout = 30_000, pollInterval = 500, )