Misc fixes

* Remove auto-port default value (Port==0) from all services
* Fixes from Ivan's latest review
This commit is contained in:
Fabiana Cecin 2026-05-11 13:40:58 -03:00
parent 689ef70de9
commit e39a954fe7
No known key found for this signature in database
GPG Key ID: BCAB8A55CB51B6C7
10 changed files with 30 additions and 19 deletions

View File

@ -99,20 +99,18 @@ suite "Wakunode2 - Waku initialization":
(waitFor waku.stop()).isOkOr:
raiseAssert error
test "unspecified service ports default to 0 then bind non-zero":
test "explicit port=0 triggers auto-bind across all services":
var builder = defaultTestWakuConfBuilder()
builder.withP2pTcpPort(Port(0))
builder.discv5Conf.withEnabled(true)
builder.discv5Conf.withUdpPort(Port(0))
builder.restServerConf.withEnabled(true)
builder.restServerConf.withRelayCacheCapacity(50'u32)
builder.restServerConf.withPort(Port(0))
builder.metricsServerConf.withEnabled(true)
builder.metricsServerConf.withHttpPort(Port(0))
builder.webSocketConf.withEnabled(true)
# the p2pTcp option is private
check:
builder.discv5Conf.udpPort.isNone()
builder.restServerConf.port.isNone()
builder.metricsServerConf.httpPort.isNone()
builder.webSocketConf.webSocketPort.isNone()
builder.webSocketConf.withWebSocketPort(Port(0))
let conf = builder.build().valueOr:
raiseAssert error

View File

@ -410,6 +410,8 @@ proc setupDiscoveryV5*(
p2pListenAddress: IpAddress,
portsShift: uint16,
): Result[WakuDiscoveryV5, string] =
## Public only for testing. Callers should use `setupAndStartDiscv5`, which
## additionally handles `udpPort == 0` via auto-port retry.
if conf.udpPort == Port(0):
return err(
"setupDiscoveryV5: udpPort must be non-zero; " &

View File

@ -4,6 +4,8 @@ import ../waku_conf
logScope:
topics = "waku conf builder discv5"
const DefaultDiscv5UdpPort*: Port = Port(9000)
###########################
## Discv5 Config Builder ##
###########################
@ -57,7 +59,7 @@ proc build*(b: Discv5ConfBuilder): Result[Option[Discv5Conf], string] =
bucketIpLimit: b.bucketIpLimit.get(2),
enrAutoUpdate: b.enrAutoUpdate.get(true),
tableIpLimit: b.tableIpLimit.get(10),
udpPort: b.udpPort.get(Port(0)),
udpPort: b.udpPort.get(DefaultDiscv5UdpPort),
)
)
)

View File

@ -4,6 +4,8 @@ import ../waku_conf
logScope:
topics = "waku conf builder metrics server"
const DefaultMetricsHttpPort*: Port = Port(8008)
###################################
## Metrics Server Config Builder ##
###################################
@ -40,7 +42,7 @@ proc build*(b: MetricsServerConfBuilder): Result[Option[MetricsServerConf], stri
some(
MetricsServerConf(
httpAddress: b.httpAddress.get(static parseIpAddress("127.0.0.1")),
httpPort: b.httpPort.get(Port(0)),
httpPort: b.httpPort.get(DefaultMetricsHttpPort),
logging: b.logging.get(false),
)
)

View File

@ -4,6 +4,8 @@ import ../waku_conf
logScope:
topics = "waku conf builder rest server"
const DefaultRestPort*: Port = Port(8645)
################################
## REST Server Config Builder ##
################################
@ -54,7 +56,7 @@ proc build*(b: RestServerConfBuilder): Result[Option[RestServerConf], string] =
RestServerConf(
allowOrigin: b.allowOrigin,
listenAddress: b.listenAddress.get(),
port: b.port.get(Port(0)),
port: b.port.get(DefaultRestPort),
admin: b.admin.get(false),
relayCacheCapacity: b.relayCacheCapacity.get(),
)

View File

@ -34,7 +34,9 @@ import
logScope:
topics = "waku conf builder"
const DefaultMaxConnections* = 150
const
DefaultMaxConnections* = 150
DefaultP2pTcpPort*: Port = Port(60000)
type MaxMessageSizeKind* = enum
mmskNone
@ -576,7 +578,7 @@ proc build*(
warn "Nat Strategy is not specified, defaulting to none"
"none"
let p2pTcpPort = builder.p2pTcpPort.get(Port(0))
let p2pTcpPort = builder.p2pTcpPort.get(DefaultP2pTcpPort)
let p2pListenAddress =
if builder.p2pListenAddress.isSome():

View File

@ -4,6 +4,8 @@ import waku/factory/waku_conf
logScope:
topics = "waku conf builder websocket"
const DefaultWebSocketPort*: Port = Port(8000)
##############################
## WebSocket Config Builder ##
##############################
@ -45,7 +47,8 @@ proc build*(b: WebSocketConfBuilder): Result[Option[WebSocketConf], string] =
return ok(
some(
WebSocketConf(
port: b.webSocketPort.get(Port(0)), secureConf: none(WebSocketSecureConf)
port: b.webSocketPort.get(DefaultWebSocketPort),
secureConf: none(WebSocketSecureConf),
)
)
)
@ -58,7 +61,7 @@ proc build*(b: WebSocketConfBuilder): Result[Option[WebSocketConf], string] =
return ok(
some(
WebSocketConf(
port: b.webSocketPort.get(Port(0)),
port: b.webSocketPort.get(DefaultWebSocketPort),
secureConf: some(
WebSocketSecureConf(keyPath: b.keyPath.get(), certPath: b.certPath.get())
),

View File

@ -424,9 +424,9 @@ proc startWaku*(waku: ptr Waku): Future[Result[void, string]] {.async: (raises:
## Update waku data that is set dynamically on node start
try:
(await updateWaku(waku)).isOkOr:
return err("Error in updateWaku: " & $error)
return err("Error in startWaku: " & $error)
except CatchableError:
return err("Caught exception in updateWaku: " & getCurrentExceptionMsg())
return err("Caught exception in startWaku: " & getCurrentExceptionMsg())
## Reliability
if not waku[].deliveryService.isNil():

View File

@ -45,7 +45,7 @@ proc getNodeInfoItem*(self: WakuStateInfo, infoItemId: NodeInfoId): string =
of NodeInfoId.MyPeerId:
return $PeerId(self.node.peerId())
of NodeInfoId.MyBoundPorts:
return self.node.ports.toJsonString()
return $self.node.ports
else:
return "unknown info item id"

View File

@ -16,5 +16,5 @@ proc init*(T: type BoundPorts): BoundPorts =
tcp: 0'u16, webSocket: 0'u16, rest: 0'u16, discv5Udp: 0'u16, metrics: 0'u16
)
proc toJsonString*(p: BoundPorts): string =
proc `$`*(p: BoundPorts): string =
return $(%*p)