From 1c52588756519ef1694f188b657a396c82cafcc3 Mon Sep 17 00:00:00 2001 From: Fabiana Cecin Date: Thu, 9 Jul 2026 20:51:05 -0300 Subject: [PATCH] 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 --- .../api/conf/logos_delivery_conf.nim | 2 +- .../api/conf/logos_delivery_conf_json.nim | 56 ++++++++++--------- logos_delivery/api/conf/messaging_conf.nim | 17 ++---- logos_delivery/logos_delivery.nim | 2 +- tests/api/test_api_receive.nim | 3 +- tests/api/test_api_send.nim | 22 ++------ tests/api/test_api_subscription.nim | 24 ++++---- tests/api/test_conf.nim | 22 ++++---- .../test_reliable_channel_send_receive.nim | 3 +- 9 files changed, 65 insertions(+), 86 deletions(-) diff --git a/logos_delivery/api/conf/logos_delivery_conf.nim b/logos_delivery/api/conf/logos_delivery_conf.nim index e5ac7432a..3b831d9fd 100644 --- a/logos_delivery/api/conf/logos_delivery_conf.nim +++ b/logos_delivery/api/conf/logos_delivery_conf.nim @@ -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, diff --git a/logos_delivery/api/conf/logos_delivery_conf_json.nim b/logos_delivery/api/conf/logos_delivery_conf_json.nim index e5df174e4..823ddfbff 100644 --- a/logos_delivery/api/conf/logos_delivery_conf_json.nim +++ b/logos_delivery/api/conf/logos_delivery_conf_json.nim @@ -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 diff --git a/logos_delivery/api/conf/messaging_conf.nim b/logos_delivery/api/conf/messaging_conf.nim index 86a73575b..490d347ee 100644 --- a/logos_delivery/api/conf/messaging_conf.nim +++ b/logos_delivery/api/conf/messaging_conf.nim @@ -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() diff --git a/logos_delivery/logos_delivery.nim b/logos_delivery/logos_delivery.nim index 0e1f77104..50ef9d617 100644 --- a/logos_delivery/logos_delivery.nim +++ b/logos_delivery/logos_delivery.nim @@ -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(), diff --git a/tests/api/test_api_receive.nim b/tests/api/test_api_receive.nim index 870f85860..6f482e6be 100644 --- a/tests/api/test_api_receive.nim +++ b/tests/api/test_api_receive.nim @@ -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) diff --git a/tests/api/test_api_send.nim b/tests/api/test_api_send.nim index 8df564b0d..00f207f1c 100644 --- a/tests/api/test_api_send.nim +++ b/tests/api/test_api_send.nim @@ -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 diff --git a/tests/api/test_api_subscription.nim b/tests/api/test_api_subscription.nim index 90d160bc3..2e007eca9 100644 --- a/tests/api/test_api_subscription.nim +++ b/tests/api/test_api_subscription.nim @@ -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 = diff --git a/tests/api/test_conf.nim b/tests/api/test_conf.nim index 705c00825..ef8ef3071 100644 --- a/tests/api/test_conf.nim +++ b/tests/api/test_conf.nim @@ -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 diff --git a/tests/channels/test_reliable_channel_send_receive.nim b/tests/channels/test_reliable_channel_send_receive.nim index b76851006..7000d59ce 100644 --- a/tests/channels/test_reliable_channel_send_receive.nim +++ b/tests/channels/test_reliable_channel_send_receive.nim @@ -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)