mirror of
https://github.com/logos-messaging/logos-delivery.git
synced 2026-07-19 11:09:26 +00:00
chore: remove the fleet mode enum value
* MessagingMode (Edge, Core) replaces LogosDeliveryMode * "fleet" is a JSON string; it routes to the kernel-only constructor * applyMode can no longer fail; drop its Result * parseMode is gone; one case owns the three mode strings * LogosDelivery.new and LogosDeliveryConf.init take MessagingMode
This commit is contained in:
parent
a26da34557
commit
1c52588756
@ -20,7 +20,7 @@ proc init*(T: type LogosDeliveryConf, kernelConf: KernelConf): LogosDeliveryConf
|
||||
|
||||
proc init*(
|
||||
T: type LogosDeliveryConf,
|
||||
mode: LogosDeliveryMode,
|
||||
mode: MessagingMode,
|
||||
preset: string,
|
||||
messagingOverrides: MessagingClientConf,
|
||||
channelsOverrides: ReliableChannelManagerConf,
|
||||
|
||||
@ -13,22 +13,14 @@ const
|
||||
KeyKernelConf = "kernelconf"
|
||||
KeyMessagingOverrides = "messagingoverrides"
|
||||
KeyChannelsOverrides = "channelsoverrides"
|
||||
ModeCore = "core"
|
||||
ModeEdge = "edge"
|
||||
ModeFleet = "fleet"
|
||||
# [Legacy flat JSON config] Keys that left the kernel and so must be lifted out of
|
||||
# a flat blob before the WakuNodeConf walker sees them (it would reject them).
|
||||
KeyReliabilityEnabled = "reliabilityenabled"
|
||||
KeyReliability = "reliability"
|
||||
|
||||
proc parseMode(s: string): Result[LogosDeliveryMode, string] =
|
||||
case s.strip().toLowerAscii()
|
||||
of "core":
|
||||
return ok(LogosDeliveryMode.Core)
|
||||
of "edge":
|
||||
return ok(LogosDeliveryMode.Edge)
|
||||
of "fleet":
|
||||
return ok(LogosDeliveryMode.Fleet)
|
||||
else:
|
||||
return err("invalid mode: '" & s & "' (expected 'Core', 'Edge' or 'Fleet')")
|
||||
|
||||
proc parseOverrides[T](defaults: T, node: JsonNode, label: string): Result[T, string] =
|
||||
## Parse the JSON object `node` as overrides on top of `defaults`.
|
||||
if node.kind != JObject:
|
||||
@ -43,8 +35,23 @@ proc parseOverrides[T](defaults: T, node: JsonNode, label: string): Result[T, st
|
||||
)
|
||||
return ok(conf)
|
||||
|
||||
proc parseFleetConf(
|
||||
topJsonNode: var Table[string, (string, JsonNode)]
|
||||
): ConfResult[LogosDeliveryConf] =
|
||||
## Kernel-only: a raw kernelConf and no upper layers.
|
||||
if not topJsonNode.hasKey(KeyKernelConf):
|
||||
return err("fleet mode requires a 'kernelConf' object")
|
||||
let (_, v) = topJsonNode.getOrDefault(KeyKernelConf)
|
||||
let kernel = ?parseOverrides(?defaultWakuNodeConf(), v, "kernelConf")
|
||||
topJsonNode.del(KeyKernelConf)
|
||||
if topJsonNode.len > 0:
|
||||
return err(
|
||||
unknownKeysError(topJsonNode, "fleet mode takes only 'kernelConf'; unexpected")
|
||||
)
|
||||
return ok(LogosDeliveryConf.init(KernelConf(kernel)))
|
||||
|
||||
proc parseFlatConf(
|
||||
mode: LogosDeliveryMode, topJsonNode: var Table[string, (string, JsonNode)]
|
||||
mode: MessagingMode, topJsonNode: var Table[string, (string, JsonNode)]
|
||||
): ConfResult[LogosDeliveryConf] =
|
||||
## [Legacy flat JSON config] Flat shape: a blob of `WakuNodeConf` fields. `mode`
|
||||
## expands to protocol flags over raw kernel defaults, `reliabilityEnabled` routes
|
||||
@ -67,7 +74,7 @@ proc parseFlatConf(
|
||||
# the mode's protocol flags (the kernel no longer owns `mode`, so we expand it here,
|
||||
# like the old kernel builder did), then let explicit fields override.
|
||||
var kernel = ?defaultWakuNodeConf()
|
||||
?applyMode(kernel, mode)
|
||||
applyMode(kernel, mode)
|
||||
?applyJsonFieldsToConf(
|
||||
kernel, topJsonNode, "Failed to parse config field",
|
||||
"Unrecognized configuration option(s) found",
|
||||
@ -98,25 +105,22 @@ proc parseLogosDeliveryConf*(jsonStr: string): ConfResult[LogosDeliveryConf] =
|
||||
|
||||
var top = ?collectJsonFields(node)
|
||||
|
||||
var mode = LogosDeliveryMode.Core
|
||||
var mode = MessagingMode.Core
|
||||
if top.hasKey(KeyMode):
|
||||
let (_, v) = top.getOrDefault(KeyMode)
|
||||
if v.kind != JString:
|
||||
return err("mode must be a string")
|
||||
mode = ?parseMode(v.getStr())
|
||||
top.del(KeyMode)
|
||||
|
||||
if mode == LogosDeliveryMode.Fleet:
|
||||
# Kernel-only: a raw kernelConf and no upper layers.
|
||||
if not top.hasKey(KeyKernelConf):
|
||||
return err("fleet mode requires a 'kernelConf' object")
|
||||
let (_, v) = top.getOrDefault(KeyKernelConf)
|
||||
let kernel = ?parseOverrides(?defaultWakuNodeConf(), v, "kernelConf")
|
||||
top.del(KeyKernelConf)
|
||||
if top.len > 0:
|
||||
case v.getStr().strip().toLowerAscii()
|
||||
of ModeFleet:
|
||||
return parseFleetConf(top)
|
||||
of ModeCore:
|
||||
mode = MessagingMode.Core
|
||||
of ModeEdge:
|
||||
mode = MessagingMode.Edge
|
||||
else:
|
||||
return
|
||||
err(unknownKeysError(top, "fleet mode takes only 'kernelConf'; unexpected"))
|
||||
return ok(LogosDeliveryConf.init(KernelConf(kernel)))
|
||||
err("invalid mode: '" & v.getStr() & "' (expected 'Core', 'Edge' or 'Fleet')")
|
||||
|
||||
# [Legacy flat JSON config] A wrapper key marks our structured shape. Otherwise any
|
||||
# leftover top-level key besides `preset` (mode is already consumed) is a bare
|
||||
|
||||
@ -9,10 +9,9 @@ import logos_delivery/waku/factory/networks_config
|
||||
|
||||
export kernel_conf
|
||||
|
||||
type LogosDeliveryMode* {.pure.} = enum
|
||||
type MessagingMode* {.pure.} = enum
|
||||
Edge # client-only node
|
||||
Core # full service node
|
||||
Fleet # kernel-only node from a raw kernel config
|
||||
|
||||
type MessagingClientConf* = object
|
||||
clusterId* {.name: "cluster-id".}: Option[uint16] ## Network cluster id.
|
||||
@ -55,33 +54,29 @@ type MessagingClientConf* = object
|
||||
nodeKey* {.name: "nodekey".}: Option[crypto.PrivateKey]
|
||||
## P2P node private key (64-char hex): stable identity / peerId across restarts.
|
||||
|
||||
proc applyMode*(conf: var WakuNodeConf, mode: LogosDeliveryMode): ConfResult[void] =
|
||||
proc applyMode*(conf: var WakuNodeConf, mode: MessagingMode) =
|
||||
## Sets the protocol flags implied by the mode.
|
||||
case mode
|
||||
of LogosDeliveryMode.Core:
|
||||
of MessagingMode.Core:
|
||||
conf.relay = true
|
||||
conf.filter = true
|
||||
conf.lightpush = true
|
||||
conf.discv5Discovery = some(true)
|
||||
conf.peerExchange = true
|
||||
conf.rendezvous = true
|
||||
of LogosDeliveryMode.Edge:
|
||||
of MessagingMode.Edge:
|
||||
conf.peerExchange = true
|
||||
conf.relay = false
|
||||
conf.filter = false
|
||||
conf.lightpush = false
|
||||
conf.store = false
|
||||
of LogosDeliveryMode.Fleet:
|
||||
return
|
||||
err("fleet mode takes a raw kernel config; use LogosDelivery.new(kernelConf)")
|
||||
return ok()
|
||||
|
||||
proc toWakuNodeConf*(
|
||||
self: MessagingClientConf, mode: LogosDeliveryMode
|
||||
self: MessagingClientConf, mode: MessagingMode
|
||||
): ConfResult[WakuNodeConf] =
|
||||
## Mode sets the protocol flags; set fields map to their kernel counterpart.
|
||||
var conf = ?defaultWakuNodeConf()
|
||||
?applyMode(conf, mode)
|
||||
applyMode(conf, mode)
|
||||
|
||||
if self.store.isSome():
|
||||
conf.store = self.store.get()
|
||||
|
||||
@ -144,7 +144,7 @@ proc new*(
|
||||
|
||||
proc new*(
|
||||
T: type LogosDelivery,
|
||||
mode: LogosDeliveryMode = LogosDeliveryMode.Core,
|
||||
mode: MessagingMode = MessagingMode.Core,
|
||||
preset: string = "",
|
||||
messagingOverrides: MessagingClientConf = MessagingClientConf(),
|
||||
channelsOverrides: ReliableChannelManagerConf = ReliableChannelManagerConf(),
|
||||
|
||||
@ -83,8 +83,7 @@ proc waitForConnectionStatus(
|
||||
await EventConnectionStatusChange.dropListener(brokerCtx, handle)
|
||||
|
||||
proc createApiNodeConf(numShards: uint16 = 1): WakuNodeConf =
|
||||
var conf = MessagingClientConf()
|
||||
.toWakuNodeConf(messaging_conf.LogosDeliveryMode.Core).valueOr:
|
||||
var conf = MessagingClientConf().toWakuNodeConf(MessagingMode.Core).valueOr:
|
||||
raiseAssert error
|
||||
conf.listenAddress = parseIpAddress("0.0.0.0")
|
||||
conf.tcpPort = Port(0)
|
||||
|
||||
@ -120,9 +120,7 @@ proc validate(
|
||||
for requestId in manager.errorRequestIds:
|
||||
check requestId == expectedRequestId
|
||||
|
||||
proc createApiNodeConf(
|
||||
mode: messaging_conf.LogosDeliveryMode = messaging_conf.LogosDeliveryMode.Core
|
||||
): WakuNodeConf =
|
||||
proc createApiNodeConf(mode: MessagingMode = MessagingMode.Core): WakuNodeConf =
|
||||
var conf = MessagingClientConf().toWakuNodeConf(mode).valueOr:
|
||||
raiseAssert error
|
||||
conf.listenAddress = parseIpAddress("0.0.0.0")
|
||||
@ -354,11 +352,7 @@ suite "Waku API - Send":
|
||||
## connected to a lightpush-capable peer must deliver through lightpush.
|
||||
var node: LogosDelivery
|
||||
lockNewGlobalBrokerContext:
|
||||
node = (
|
||||
await LogosDelivery.new(
|
||||
createApiNodeConf(messaging_conf.LogosDeliveryMode.Edge)
|
||||
)
|
||||
).valueOr:
|
||||
node = (await LogosDelivery.new(createApiNodeConf(MessagingMode.Edge))).valueOr:
|
||||
raiseAssert error
|
||||
(await node.start()).isOkOr:
|
||||
raiseAssert "Failed to start Waku node: " & error
|
||||
@ -393,11 +387,7 @@ suite "Waku API - Send":
|
||||
## later retry must deliver the queued message.
|
||||
var node: LogosDelivery
|
||||
lockNewGlobalBrokerContext:
|
||||
node = (
|
||||
await LogosDelivery.new(
|
||||
createApiNodeConf(messaging_conf.LogosDeliveryMode.Edge)
|
||||
)
|
||||
).valueOr:
|
||||
node = (await LogosDelivery.new(createApiNodeConf(MessagingMode.Edge))).valueOr:
|
||||
raiseAssert error
|
||||
(await node.start()).isOkOr:
|
||||
raiseAssert "Failed to start Waku node: " & error
|
||||
@ -488,11 +478,7 @@ suite "Waku API - Send":
|
||||
|
||||
var node: LogosDelivery
|
||||
lockNewGlobalBrokerContext:
|
||||
node = (
|
||||
await LogosDelivery.new(
|
||||
createApiNodeConf(messaging_conf.LogosDeliveryMode.Edge)
|
||||
)
|
||||
).valueOr:
|
||||
node = (await LogosDelivery.new(createApiNodeConf(MessagingMode.Edge))).valueOr:
|
||||
raiseAssert error
|
||||
(await node.start()).isOkOr:
|
||||
raiseAssert "Failed to start Waku node: " & error
|
||||
|
||||
@ -69,8 +69,7 @@ type TestNetwork = ref object
|
||||
publisherPeerInfo: RemotePeerInfo
|
||||
|
||||
proc createApiNodeConf(
|
||||
mode: messaging_conf.LogosDeliveryMode = messaging_conf.LogosDeliveryMode.Core,
|
||||
numShards: uint16 = 1,
|
||||
mode: MessagingMode = MessagingMode.Core, numShards: uint16 = 1
|
||||
): WakuNodeConf =
|
||||
var conf = MessagingClientConf().toWakuNodeConf(mode).valueOr:
|
||||
raiseAssert error
|
||||
@ -90,8 +89,7 @@ proc setupSubscriberNode(conf: WakuNodeConf): Future[LogosDelivery] {.async.} =
|
||||
return node
|
||||
|
||||
proc setupNetwork(
|
||||
numShards: uint16 = 1,
|
||||
mode: messaging_conf.LogosDeliveryMode = messaging_conf.LogosDeliveryMode.Core,
|
||||
numShards: uint16 = 1, mode: MessagingMode = MessagingMode.Core
|
||||
): Future[TestNetwork] {.async.} =
|
||||
var net = TestNetwork()
|
||||
|
||||
@ -101,7 +99,7 @@ proc setupNetwork(
|
||||
"Failed to mount metadata"
|
||||
)
|
||||
(await net.publisher.mountRelay()).expect("Failed to mount relay")
|
||||
if mode == messaging_conf.LogosDeliveryMode.Edge:
|
||||
if mode == MessagingMode.Edge:
|
||||
await net.publisher.mountFilter()
|
||||
await net.publisher.mountLibp2pPing()
|
||||
await net.publisher.start()
|
||||
@ -120,7 +118,7 @@ proc setupNetwork(
|
||||
"Failed to sub publisher"
|
||||
)
|
||||
|
||||
if mode == messaging_conf.LogosDeliveryMode.Edge:
|
||||
if mode == MessagingMode.Edge:
|
||||
lockNewGlobalBrokerContext:
|
||||
net.meshBuddy = newTestWakuNode(generateSecp256k1Key())
|
||||
net.meshBuddy.mountMetadata(3, toSeq(0'u16 ..< numShards)).expect(
|
||||
@ -475,7 +473,7 @@ suite "Messaging API, SubscriptionManager":
|
||||
await verifyNetworkState(activeSubs)
|
||||
|
||||
asyncTest "Subscription API, edge node subscribe and receive message":
|
||||
let net = await setupNetwork(1, messaging_conf.LogosDeliveryMode.Edge)
|
||||
let net = await setupNetwork(1, MessagingMode.Edge)
|
||||
defer:
|
||||
await net.teardown()
|
||||
|
||||
@ -497,7 +495,7 @@ suite "Messaging API, SubscriptionManager":
|
||||
check eventManager.receivedMessages[0].contentTopic == testTopic
|
||||
|
||||
asyncTest "Subscription API, edge node ignores unsubscribed content topics":
|
||||
let net = await setupNetwork(1, messaging_conf.LogosDeliveryMode.Edge)
|
||||
let net = await setupNetwork(1, MessagingMode.Edge)
|
||||
defer:
|
||||
await net.teardown()
|
||||
|
||||
@ -519,7 +517,7 @@ suite "Messaging API, SubscriptionManager":
|
||||
check eventManager.receivedMessages.len == 0
|
||||
|
||||
asyncTest "Subscription API, edge node unsubscribe stops message receipt":
|
||||
let net = await setupNetwork(1, messaging_conf.LogosDeliveryMode.Edge)
|
||||
let net = await setupNetwork(1, MessagingMode.Edge)
|
||||
defer:
|
||||
await net.teardown()
|
||||
|
||||
@ -544,7 +542,7 @@ suite "Messaging API, SubscriptionManager":
|
||||
check eventManager.receivedMessages.len == 0
|
||||
|
||||
asyncTest "Subscription API, edge node overlapping topics isolation":
|
||||
let net = await setupNetwork(1, messaging_conf.LogosDeliveryMode.Edge)
|
||||
let net = await setupNetwork(1, MessagingMode.Edge)
|
||||
defer:
|
||||
await net.teardown()
|
||||
|
||||
@ -573,7 +571,7 @@ suite "Messaging API, SubscriptionManager":
|
||||
check eventManager.receivedMessages[0].contentTopic == topicB
|
||||
|
||||
asyncTest "Subscription API, edge node resubscribe after unsubscribe":
|
||||
let net = await setupNetwork(1, messaging_conf.LogosDeliveryMode.Edge)
|
||||
let net = await setupNetwork(1, MessagingMode.Edge)
|
||||
defer:
|
||||
await net.teardown()
|
||||
|
||||
@ -658,7 +656,7 @@ suite "Messaging API, SubscriptionManager":
|
||||
|
||||
await meshBuddy.connectToNodes(@[publisherPeerInfo])
|
||||
|
||||
let conf = createApiNodeConf(messaging_conf.LogosDeliveryMode.Edge, numShards)
|
||||
let conf = createApiNodeConf(MessagingMode.Edge, numShards)
|
||||
var subscriber: LogosDelivery
|
||||
lockNewGlobalBrokerContext:
|
||||
subscriber =
|
||||
@ -786,7 +784,7 @@ suite "Messaging API, SubscriptionManager":
|
||||
await meshBuddy.connectToNodes(@[publisherPeerInfo])
|
||||
await sparePeer.connectToNodes(@[publisherPeerInfo])
|
||||
|
||||
let conf = createApiNodeConf(messaging_conf.LogosDeliveryMode.Edge, numShards)
|
||||
let conf = createApiNodeConf(MessagingMode.Edge, numShards)
|
||||
var subscriber: LogosDelivery
|
||||
lockNewGlobalBrokerContext:
|
||||
subscriber =
|
||||
|
||||
@ -9,7 +9,7 @@ import logos_delivery/waku/common/logging
|
||||
|
||||
suite "MessagingClientConf - mode expansion (toWakuNodeConf)":
|
||||
test "Core mode enables relay + service protocols":
|
||||
let kc = MessagingClientConf().toWakuNodeConf(LogosDeliveryMode.Core).valueOr:
|
||||
let kc = MessagingClientConf().toWakuNodeConf(MessagingMode.Core).valueOr:
|
||||
raiseAssert error
|
||||
check:
|
||||
kc.relay == true
|
||||
@ -20,7 +20,7 @@ suite "MessagingClientConf - mode expansion (toWakuNodeConf)":
|
||||
kc.rendezvous == true
|
||||
|
||||
test "Edge mode is client-only (no relay/filter/lightpush/store)":
|
||||
let kc = MessagingClientConf().toWakuNodeConf(LogosDeliveryMode.Edge).valueOr:
|
||||
let kc = MessagingClientConf().toWakuNodeConf(MessagingMode.Edge).valueOr:
|
||||
raiseAssert error
|
||||
check:
|
||||
kc.relay == false
|
||||
@ -37,7 +37,7 @@ suite "MessagingClientConf - field mapping + transport policy":
|
||||
numShardsInCluster: some(4'u16),
|
||||
maxMessageSize: some("150KiB"),
|
||||
)
|
||||
let kc = mc.toWakuNodeConf(LogosDeliveryMode.Core).valueOr:
|
||||
let kc = mc.toWakuNodeConf(MessagingMode.Core).valueOr:
|
||||
raiseAssert error
|
||||
check:
|
||||
kc.clusterId == some(3'u16)
|
||||
@ -45,7 +45,7 @@ suite "MessagingClientConf - field mapping + transport policy":
|
||||
kc.maxMessageSize == "150KiB"
|
||||
|
||||
test "messaging transport defaults: ephemeral ports, websocket off, quic on":
|
||||
let kc = MessagingClientConf().toWakuNodeConf(LogosDeliveryMode.Core).valueOr:
|
||||
let kc = MessagingClientConf().toWakuNodeConf(MessagingMode.Core).valueOr:
|
||||
raiseAssert error
|
||||
check:
|
||||
kc.tcpPort == Port(0)
|
||||
@ -59,7 +59,7 @@ suite "MessagingClientConf - field mapping + transport policy":
|
||||
websocketSupport: some(true),
|
||||
quicSupport: some(false),
|
||||
)
|
||||
let kc = mc.toWakuNodeConf(LogosDeliveryMode.Core).valueOr:
|
||||
let kc = mc.toWakuNodeConf(MessagingMode.Core).valueOr:
|
||||
raiseAssert error
|
||||
check:
|
||||
kc.tcpPort == Port(1234)
|
||||
@ -91,7 +91,7 @@ suite "MessagingClientConf - preset resolution":
|
||||
let presetConf = resolvePreset("logos.dev").valueOr:
|
||||
raiseAssert error
|
||||
let merged = merge(presetConf, MessagingClientConf(numShardsInCluster: some(1'u16)))
|
||||
var kernelConf = toWakuNodeConf(merged, LogosDeliveryMode.Core).valueOr:
|
||||
var kernelConf = toWakuNodeConf(merged, MessagingMode.Core).valueOr:
|
||||
raiseAssert error
|
||||
kernelConf.preset = "logos.dev"
|
||||
let wakuConf = kernelConf.toWakuConf().valueOr:
|
||||
@ -282,7 +282,7 @@ suite "LogosDelivery.new - construction (the app-dev entry)":
|
||||
lockNewGlobalBrokerContext:
|
||||
node = (
|
||||
await LogosDelivery.new(
|
||||
LogosDeliveryMode.Core,
|
||||
MessagingMode.Core,
|
||||
"",
|
||||
MessagingClientConf(
|
||||
clusterId: some(3'u16),
|
||||
@ -304,7 +304,7 @@ suite "LogosDelivery.new - construction (the app-dev entry)":
|
||||
lockNewGlobalBrokerContext:
|
||||
node = (
|
||||
await LogosDelivery.new(
|
||||
LogosDeliveryMode.Core,
|
||||
MessagingMode.Core,
|
||||
"logostest",
|
||||
MessagingClientConf(listenIpv4: some(parseIpAddress("0.0.0.0"))),
|
||||
)
|
||||
@ -315,9 +315,7 @@ suite "LogosDelivery.new - construction (the app-dev entry)":
|
||||
|
||||
suite "MessagingClientConf - store override":
|
||||
test "store opt-in overrides the mode default; protocol flags follow the mode":
|
||||
let kc = MessagingClientConf(store: some(true)).toWakuNodeConf(
|
||||
LogosDeliveryMode.Edge
|
||||
).valueOr:
|
||||
let kc = MessagingClientConf(store: some(true)).toWakuNodeConf(MessagingMode.Edge).valueOr:
|
||||
raiseAssert error
|
||||
check:
|
||||
kc.store == true # Edge defaults store off; the explicit opt-in wins
|
||||
@ -326,7 +324,7 @@ suite "MessagingClientConf - store override":
|
||||
suite "LogosDelivery.new - raw kernel construction":
|
||||
asyncTest "a fleet node mounts the kernel only; start/stop tolerate the nil layers":
|
||||
let kernel = MessagingClientConf(listenIpv4: some(parseIpAddress("0.0.0.0"))).toWakuNodeConf(
|
||||
LogosDeliveryMode.Core
|
||||
MessagingMode.Core
|
||||
).valueOr:
|
||||
raiseAssert error
|
||||
var node: LogosDelivery
|
||||
|
||||
@ -28,8 +28,7 @@ import snapshot_codec
|
||||
const TestTimeout = chronos.seconds(15)
|
||||
|
||||
proc createApiNodeConf(): WakuNodeConf =
|
||||
var conf = MessagingClientConf()
|
||||
.toWakuNodeConf(messaging_conf.LogosDeliveryMode.Core).valueOr:
|
||||
var conf = MessagingClientConf().toWakuNodeConf(MessagingMode.Core).valueOr:
|
||||
raiseAssert error
|
||||
conf.listenAddress = parseIpAddress("0.0.0.0")
|
||||
conf.tcpPort = Port(0)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user