Skip to content

Bug: fpmsyncd drops route updates (zmq send failed, EAGAIN) under route burst when swss_zmq is enabled #28369

Description

@deepak-singhal0408

Is it platform specific

generic

Importance or Severity

High

Description of the bug

SYSTEM_DEFAULTS|swss_zmq is a single knob that enables ZMQ mode on both the northbound route path (fpmsyncd -> orchagent RouteOrch) and the southbound path (orchagent -> syncd). When it is enabled (CONFIG_DB SYSTEM_DEFAULTS|swss_zmq = enabled), fpmsyncd forwards route updates to orchagent over the northbound ZMQ channel (tcp://localhost:8101/8102) instead of via Redis keyspace notifications. This bug is on that northbound route path.

Under a burst of route programming (e.g. config reload, a large route add/withdraw, or simultaneous route churn on multiple ASICs' bgp containers), the orchagent route-ZMQ consumer cannot drain the queue fast enough. The ZMQ send buffer reaches its high-water mark, and fpmsyncd repeatedly fails to send:

ERR bgpN#fpmsyncd: :- sendMsg: zmq send failed, endpoint: tcp://localhost:8101, zmqerrno: 11: Resource temporarily unavailable

fpmsyncd retries for a bounded period and then gives up on the send. Because the ZMQ send is attempted before the route is persisted, the affected update is neither delivered to orchagent nor written to APP_DB, and there is no automatic retry/replay — so the route update can be silently lost until the next full route re-sync.

This is functionally harmful (potential dataplane route loss), not just log noise. The code path is generic (same producer/consumer code on virtual and real hardware); the risk grows with route scale.

Steps to Reproduce

  1. Bring up a SONiC switch (observed on a multi-ASIC T2 topology; the ZMQ path is platform-generic).
  2. Enable ZMQ mode: set CONFIG_DB SYSTEM_DEFAULTS|swss_zmq status=enabled and restart swss (this enables both the northbound route ZMQ and southbound syncd ZMQ; the route producer/consumer path is the one exercised here).
  3. Generate a large route burst — e.g. config reload, or add/remove a large batch of routes, or drive route churn on each ASIC's bgp/fpmsyncd simultaneously.
  4. Watch fpmsyncd in syslog (/var/log/syslog, bgpN#fpmsyncd).

Actual Behavior and Expected Behavior

Actual: under the burst, fpmsyncd logs sendMsg: zmq send failed ... zmqerrno: 11 (EAGAIN / Resource temporarily unavailable), the send is abandoned, and the affected route update is dropped (not delivered to orchagent, not persisted to APP_DB) with no automatic recovery.

Expected: route updates are reliably delivered and persisted even under burst load; fpmsyncd must not silently drop route updates when the ZMQ channel is temporarily full.

Relevant log output

ERR bgp0#fpmsyncd: :- sendMsg: zmq send failed, endpoint: tcp://localhost:8101, zmqerrno: 11: Resource temporarily unavailable
ERR bgp1#fpmsyncd: :- sendMsg: zmq send failed, endpoint: tcp://localhost:8102, zmqerrno: 11: Resource temporarily unavailable

Output of show version, show techsupport

Observed on a SONiC master-based image (multi-ASIC T2). Full techsupport not captured from the observing run;
reproduces wherever SYSTEM_DEFAULTS|swss_zmq is enabled and a route burst is applied.

Metadata

Metadata

Labels

Type

No type

Projects

Status
In Progress

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions