mirror of
https://github.com/logos-messaging/logos-delivery.git
synced 2026-04-17 05:33:07 +00:00
feat: active filter subscription management for edge nodes ## Subscription Manager * edgeFilterSubLoop reconciles desired vs actual filter subscriptions * edgeFilterHealthLoop pings filter peers, evicts stale ones * EdgeFilterSubState per-shard tracking of confirmed peers and health * best-effort unsubscribe on peer removal * RequestEdgeShardHealth and RequestEdgeFilterPeerCount broker providers ## WakuNode * Remove old edge health loop (loopEdgeHealth, edgeHealthEvent, calculateEdgeTopicHealth) * Register MessageSeenEvent push handler on filter client during start * startDeliveryService now returns `Result[void, string]` and propagates errors ## Health Monitor * getFilterClientHealth queries RequestEdgeFilterPeerCount via broker * Shard/content health providers fall back to RequestEdgeShardHealth when relay inactive * Listen to EventShardTopicHealthChange for health recalculation * Add missing return p.notReady() on failed edge filter peer count request * HealthyThreshold constant moved to `connection_status.nim` ## Broker types * RequestEdgeShardHealth, RequestEdgeFilterPeerCount request types * EventShardTopicHealthChange event type ## Filter Client * Add timeout parameter to ping proc ## Tests * Health monitor event tests with per-node lockNewGlobalBrokerContext * Edge (light client) health update test * Edge health driven by confirmed filter subscriptions test * API subscription tests: sub/receive, failover, peer replacement Co-authored-by: Ivan FB <128452529+Ivansete-status@users.noreply.github.com> Co-authored by Zoltan Nagy
19 lines
597 B
Nim
19 lines
597 B
Nim
import chronos, results, std/strutils, ../../api/types
|
|
|
|
export ConnectionStatus
|
|
|
|
const HealthyThreshold* = 2
|
|
## Minimum peers required per service protocol for a "Connected" status (excluding Relay).
|
|
|
|
proc init*(
|
|
t: typedesc[ConnectionStatus], strRep: string
|
|
): Result[ConnectionStatus, string] =
|
|
try:
|
|
let status = parseEnum[ConnectionStatus](strRep)
|
|
return ok(status)
|
|
except ValueError:
|
|
return err("Invalid ConnectionStatus string representation: " & strRep)
|
|
|
|
type ConnectionStatusChangeHandler* =
|
|
proc(status: ConnectionStatus): Future[void] {.gcsafe, raises: [Defect].}
|