xds/server: create the xDS client when the xDS enabled gRPC server is created #6446
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Currently we create the xDS client when
Serve()
is called for the first time. This leads to unnecessary code complexity since we have to synchronize access to the xDS client and its close function inside the server. The following code paths touch the xDS client:Serve
to see if one has been created, and create a new one if none existsStop
andGracefulStop
to closed the clientListenerWrapper
to register LDS and RDS watches using itThis PR changes the code such that the xDS client is created when the xDS enabled gRPC server is created. Certain bootstrap configuration validation is also moved to here. Therefore we can fail the server creation when appropriate.
Note that with this change, since the mutex has been eliminated,
Serve
andStop
can race in the sense thatServe
might not returngrpc.ErrServerStopped
in all cases, but this does not affect any other functionality and does not lead to leaking of the xDS client.This PR also cleans up the tests to use a real management server and gets rid of using a fake xDS client.
#resource-agnostic-xdsclient-api
RELEASE NOTES: none