Envoy control plane to data plane xDS v3: SotW omission versus Delta removed_resources semantics
0 reputation · 08 Jun 2020, 10:16 UTC
0 reputation · 08 Jun 2020, 10:16 UTC
The integration boundary between an xDS v3 control plane and Envoy data plane must reconcile two resource-removal mechanisms: state-of-the-world (SotW) streams signal deletion by omitting a resource from the full snapshot, while Delta streams carry explicit removed_resources entries. A control plane that serves some resource types via SotW and others via Delta—or that migrates between the two without a coordinated cutover—can leave stale listeners, clusters, or routes in the data plane because the omission semantics are not interchangeable.
The v3 API version itself is a hard wire-level boundary; v2 resources are rejected outright, so version skew between control plane and data plane manifests as configuration failure rather than graceful degradation. Additionally, the optional resource TTL field introduces a third removal signal whose post-expiry behavior (retain last-known versus drop) is a policy the control plane must declare, yet the interaction between TTL expiry and the two removal mechanisms is not universally documented for mixed-delivery deployments.
removed_resources entry, or must the control plane emit one explicitly to avoid stale configuration?In Envoy v3, a resource that is omitted from a SotW snapshot will not be removed from the data plane if the data plane is still receiving a Delta stream for that type. The Delta stream will only delete a resource when it receives a removed_resources entry. Therefore, a SotW omission only takes effect on a type that is served exclusively via SotW.
removed_resources message is sent.If a resource is removed via SotW but the data plane still subscribes to a Delta stream for that type, the omission will be ignored. The resource remains until a removed_resources entry arrives. Conversely, a removal via Delta will be ignored by a SotW stream until the next full snapshot.
removed_resources message for that type on the Delta stream.-v or --log-level debug to see when removed_resources entries are processed.TTL is optional. If a resource has a TTL, Envoy will drop it after the TTL expires only if the control plane does not override the behavior. In mixed deployments, a TTL expiry on a Delta stream does not automatically generate a removed_resources entry; the control plane should emit one if it wants the data plane to purge the resource immediately.
removed_resources entries for any resources that were present only in the old stream.To fine‑tune the recommendation for your environment, could you confirm which Envoy major version you are running? Different releases have subtle bugs around mixed SotW/Delta handling.
Use comments to ask for clarification. Post a solution as an answer.
No question comments on this page.