-
Notifications
You must be signed in to change notification settings - Fork 4.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
xds: v1.66.0 regression in xds.BootstrapContentsForTesting
#7592
Comments
Does your test spin up multiple servers as part of a single test? We recently introduced some changes wherein we added support for multiple xds clients per binary (instead of the global singleton that we used to have earlier). The way this works is that we keep a map of xds clients indexed by a name. The value of the name is the grpc channel's dial target when the xds client is created from a grpc client. The value of the name is a fixed string for xds clients created from grpc servers. So, grpc channels with different target URIs will get different xds clients, but all grpc servers will get the same xds client. These changes were made as part of https://github.com/grpc/proposal/blob/master/A71-xds-fallback.md. As part of the above changes, we also consolidated some code used to create xds clients for testing. Looks like this is what broke your tests. |
Yes, we spin up multiple servers in one test |
Let me discuss with other language implementors to see how they support this post A71. |
@howardjohn : While I think about other ways to support this, why would you want to spin up multiple servers within the same test that all require different bootstrap configurations? FWIW: this will not be possible in production, since all servers will end up with the same bootstrap configuration. |
We want to test Also its not the same test necessarily, its the same binary. Multiple go tests in the same package are in one binary. So we have a test for a server with mTLS, and then later another without for instance. 1 server per test but same issue. But we do have a test with multiple servers in a single test as noted above |
Why would these servers require different boostrap configurations though? |
Istio identifies distinct workloads by the node Id which is a part of the bootstrap. Each one gets different config based on the node id |
This is going to take a little bit of time to fix, and the fix that we have in mind is big enough to not be appropriate for a patch release. Here is the proposal:
The above approach will ensure that when tests create multiple servers or channels with different bootstrap configs, they each will get their own pools. The
We will also have a way to create the pool
We could also consolidate |
Contributions are welcome. |
Also, the branch for v1.67.0 release has already been cut. So, we should try to get this in by v1.68.0 release. |
Can the change be reverted or fixed in a patch release? Because of how go module resolution works, we cannot depend on a module that depends on grpc 1.66+ and stay on 1.65. This means we need to chose between picking up critical dependency updates and supporting proxyless gRPC in Istio. Between those two, we would unfortunately be likely pressured to drop support for proxyless gRPC given it is an experimental feature. |
We are really sorry for breaking you, but we are in the midst of a major refactor in the xDS client codebase to support xDS fallback. I have those changes ready and they are in the process of being reviewed. The changes I outlined here would be too messy to start before the above mentioned refactor is complete. I'd like to see if there are other options to unblock you in the meantime.
|
Currently we have disabled testing of proxyless gRPC |
What version of gRPC are you using?
v1.66.0
What version of Go are you using (
go version
)?1.23.0
What operating system (Linux, Windows, …) and version?
Linux
What did you do?
We have tests in Istio setting a unique bootstrap for multiple gRPC servers: https://github.com/istio/istio/blob/2d853376723eb78b6b16b195b05cdc3b542efeaa/pkg/test/echo/server/endpoint/grpc.go#L81.
After upgrading to 1.66, we found these are ignored, and the first bootstrap is used for each server.
What did you expect to see?
Same behavior as 1.65; each server uses its own bootstrap
What did you see instead?
The text was updated successfully, but these errors were encountered: