Skip to content

xds: Reject duplicate endpoint addresses in EDS - #13127

Open
valeter wants to merge 3 commits into
grpc:masterfrom
valeter:fix-13119-duplicate-eds-endpoints
Open

valeter wants to merge 3 commits into
grpc:masterfrom
valeter:fix-13119-duplicate-eds-endpoints

Conversation

@valeter

@valeter valeter commented Oct 16, 2026

Copy link
Copy Markdown

Fixes #13119.

Reject duplicate endpoint socket addresses while parsing EDS resources.
Previously, these resources were ACKed and could trigger a panic in
outlier detection.

Track addresses across the original locality entries, including entries
that may later be overwritten in the locality-keyed output map. Reject
duplicates via ResourceInvalidException so the existing NACK path retains
the last accepted resource and version.

Validation includes additional addresses when dual-stack is enabled.
The same IP with different ports remains valid, and zero-weight
localities remain ignored.

Regression tests cover duplicates within and across localities and
priorities, overwritten locality entries, equivalent IPv6 addresses,
dual-stack addresses, cold start, repeated NACKs, and recovery.

Testing

  • Original parser: 14 of 18 new parameterized regression cases fail.
  • Patched parser: all 272 cases in GrpcXdsClientImplV3Test pass using
    a standalone JUnit harness with grpc-java 1.85.0 dependencies.
  • Checkstyle 10.26.1 passes for both modified files.

Gradle build success

[16:17:13] /Users/valter/projects/grpc-java-pr git:(fix-13119-duplicate-eds-endpoints) > ./gradlew -PskipCodegen=true -PskipAndroid=true \
    :grpc-xds:test --tests io.grpc.xds.GrpcXdsClientImplV3Test \
    :grpc-xds:checkstyleMain :grpc-xds:checkstyleTest

Welcome to Gradle 8.14.5!

Here are the highlights of this release:
 - Java 24 support
 - GraalVM Native Image toolchain selection
 - Enhancements to test reporting
 - Build Authoring improvements

For more details see https://docs.gradle.org/8.14.5/release-notes.html

Starting a Gradle Daemon (subsequent builds will be faster)
*** Skipping the build of codegen and compilation of proto files because skipCodegen=true
  * Skipping the build of Android projects because skipAndroid=true

> Task :grpc-services:compileJava
Note: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

[Incubating] Problems report is available at: file:///Users/valter/projects/grpc-java-pr/build/reports/problems/problems-report.html

Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

For more on this, please refer to https://docs.gradle.org/8.14.5/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.

BUILD SUCCESSFUL in 3m 9s
83 actionable tasks: 83 executed

@linux-foundation-easycla

linux-foundation-easycla Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

CLA Signed
The committers listed above are authorized under a signed CLA.

  • ✅ login: valeter / name: Ivan Anisimov (f33829e)

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

xds: duplicate endpoint addresses across localities are ACKed and can panic outlier detection

1 participant