xDS NACK loop between when switching from gRPC RDS to file-based RDS
#10 046 ouverte le 13 févr. 2020
Métriques du dépôt
- Stars
- (27 997 stars)
- Métriques de merge PR
- (Merge moyen 8j) (378 PRs mergées en 30 j)
Description
Title: NACK loop when switching from gRPC RDS to file-based RDS
Context: we use java-control-plane, and non-incremental ADS.
Note: I'm not sure if this is a bug in Envoy, java-control-plane, or perhaps working as intended and we need to work around it in our custom control plane wrapping java-control-plane.
Description:
When transitioning the config source in RDS config from gRPC based to file path based, Envoy started endless logging lines like the following.
2020-02-12_22:59:02.92713 [2020-02-12 22:59:02.927][212341][warning][config] [external/envoy/source/common/config/grpc_mux_impl.cc:153] Ignoring unwatched type URL type.googleapis.com/envoy.api.v2.RouteConfiguration
2020-02-12_22:59:02.94401 [2020-02-12 22:59:02.943][212341][warning][config] [external/envoy/source/common/config/grpc_mux_impl.cc:153] Ignoring unwatched type URL type.googleapis.com/envoy.api.v2.RouteConfiguration
2020-02-12_22:59:02.96188 [2020-02-12 22:59:02.961][212341][warning][config] [external/envoy/source/common/config/grpc_mux_impl.cc:153] Ignoring unwatched type URL type.googleapis.com/envoy.api.v2.RouteConfiguration
I believe what happened is this:
- Envoy was operating using gRPC RDS
- Our custom integration with java-control-plane saved a new configuration snapshot into the java-control-plane Cache. The snapshot included LDS config pointing the HCM to an RDS file. It also included routes which was not necessary but for simplicity we always generate them.
- java-control-plane responds with new Listener, Envoys switches to file-based RDS. (I'm unclear on what happens to the open RDS watches at this point).
- java-control-plane responds with routes
- Envoy hits this code, seemingly queuing another RDS request with an old version (NACK)
- java-control-plane responds again
- repeat 4-6
This loop did not stop until Envoy was restarted which breaks the ADS streams.