Applies to: MQTT (paho) receiver sessions, most visibly exclusive sessions. Audience: on-call operators. Risk: no message loss — the failure is fail-closed by design — but the affected session (and every route on it) stays down until an operator or a broker-side change resolves the disagreement. It does not self-heal.
A reconcile fails when the broker rejects ANY requested filter (SUBACK error reason) or grants a LOWER QoS than requested. GoBridge deliberately has no per-topic quarantine: serving a partial route set silently would turn a broker-side policy change into invisible data loss, so the whole reconcile fails, readiness stays below Full, and — on an exclusive session — the lease is released and the session disconnects. Supervision then retries forever at the 30s backoff cap: connect → subscribe → reject → disconnect, indefinitely.
ReconcileFailures climbs steadily; MQTTQoSDowngraded counts when
the cause is a QoS grant below the request.mqtt: broker downgraded subscription QoS below requested; delivery
guarantee is weaker than the route assumes (the propagated error carries
mqtt: broker granted subscription QoS below requested), or a SUBACK
rejection error naming the topic./api/v1/monitor/ready?level=full) stays 503; for an exclusive
session the lease changes hands or churns.topic,
requested_qos, granted_qos).Exactly one of:
qos) in the route config and reload. The reconcile then no
longer requests the rejected grant.Do NOT try to “wait it out”: the flap is permanent for as long as the broker and the config disagree.
Alert on ReconcileFailures rate sustained for more than ~5 minutes
(three+ consecutive failed retries): transient reconnect reconciles recover
in one or two rounds; a steady rate is this flap.