Brings in the A32 circuit breaking limiter landed in grpc#2711 and reconciles
this branch with the retry classifier refactor and cluster discovery
connector factory that landed on master.
Conflict resolutions:
- circuit_breaking.rs: keep this branch's CDS-driven enforcement, which
waits for CDS and falls back to the gRFC A32 default of 1024
max_requests. This supersedes the no-config bypass from 79ab667.
- retry.rs: take master's RetryClassifier refactor, which already carries
the is_local_circuit_breaker_drop check this branch added.
- channel.rs: take master's GrpcMakeConnector factory and pre_route
interceptor, with circuit breaking layered between routing and retry.
- Port tests to master's retry API (RetryConfig/GrpcRetryClassifier) and
add the MIT license header to circuit_breaking.rs.
Summary
gRFC A32 circuit-breaking configuration is parsed by
tonic-xds, but request enforcement is not yet in the channel path. This PR adds the reusable limiter primitive first so its request-lifetime and state-management behavior can be reviewed independently before production CDS/channel wiring lands. It is part of #2444.max_requestswith process-global in-flight counters keyed by cluster and EDS service name, while retaining per-channel drop accounting for future LRS integration (36b03763,4a20f392,c6b89daa).UNAVAILABLEdrops so gRPC retry policy does not retry them (c6b89daa).36b03763,c6b89daa).c4559d3e,4a20f392,c6b89daa).c6b89daa).Testing Done
cargo fmt --all --checkcargo clippy -p tonic-xds --lib --all-features -- -D warnings- passedcargo test -p tonic-xds circuit_breaking --lib- 23 passed, 0 failedcargo test -p tonic-xds --all-features- 389 unit tests and 4 doc tests passedgh pr checks 2711 --repo grpc/grpc-rust- all non-skipped PR checks passed