Add bootstrap nodes connect

This commit is contained in:
Arnaud 2026-04-15 09:17:45 +04:00
parent 654b90973c
commit e349568833
No known key found for this signature in database
GPG Key ID: A6C7C781817146FA
2 changed files with 15 additions and 17 deletions

View File

@ -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(

View File

@ -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,
)