mirror of
https://github.com/logos-messaging/logos-delivery.git
synced 2026-04-18 06:03: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
52 lines
1.7 KiB
Nim
52 lines
1.7 KiB
Nim
import waku/common/broker/request_broker
|
|
|
|
import waku/api/types
|
|
import waku/node/health_monitor/[protocol_health, topic_health, health_report]
|
|
import waku/waku_core/topics
|
|
import waku/common/waku_protocol
|
|
|
|
export protocol_health, topic_health
|
|
|
|
# Get the overall node connectivity status
|
|
RequestBroker(sync):
|
|
type RequestConnectionStatus* = object
|
|
connectionStatus*: ConnectionStatus
|
|
|
|
# Get the health status of a set of content topics
|
|
RequestBroker(sync):
|
|
type RequestContentTopicsHealth* = object
|
|
contentTopicHealth*: seq[tuple[topic: ContentTopic, health: TopicHealth]]
|
|
|
|
proc signature(topics: seq[ContentTopic]): Result[RequestContentTopicsHealth, string]
|
|
|
|
# Get a consolidated node health report
|
|
RequestBroker:
|
|
type RequestHealthReport* = object
|
|
healthReport*: HealthReport
|
|
|
|
# Get the health status of a set of shards (pubsub topics)
|
|
RequestBroker(sync):
|
|
type RequestShardTopicsHealth* = object
|
|
topicHealth*: seq[tuple[topic: PubsubTopic, health: TopicHealth]]
|
|
|
|
proc signature(topics: seq[PubsubTopic]): Result[RequestShardTopicsHealth, string]
|
|
|
|
# Get the health status of a mounted protocol
|
|
RequestBroker:
|
|
type RequestProtocolHealth* = object
|
|
healthStatus*: ProtocolHealth
|
|
|
|
proc signature(protocol: WakuProtocol): Future[Result[RequestProtocolHealth, string]]
|
|
|
|
# Get edge filter health for a single shard (set by DeliveryService when edge mode is active)
|
|
RequestBroker(sync):
|
|
type RequestEdgeShardHealth* = object
|
|
health*: TopicHealth
|
|
|
|
proc signature(shard: PubsubTopic): Result[RequestEdgeShardHealth, string]
|
|
|
|
# Get edge filter confirmed peer count (set by DeliveryService when edge mode is active)
|
|
RequestBroker(sync):
|
|
type RequestEdgeFilterPeerCount* = object
|
|
peerCount*: int
|