Skip to content

A110: Child Channel Options#529

Open
AgraVator wants to merge 15 commits into
grpc:masterfrom
AgraVator:child-channel-plugins
Open

A110: Child Channel Options#529
AgraVator wants to merge 15 commits into
grpc:masterfrom
AgraVator:child-channel-plugins

Conversation

@AgraVator

Copy link
Copy Markdown
Contributor

No description provided.

@markdroth markdroth changed the title A110: Child Channel Plugins A110: Child Channel Options Dec 24, 2025

@markdroth markdroth left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The overall design looks good, but I think the doc needs work.

My main concern is that we need a much better description of the overall design in a language-agnostic way, rather than just saying that we have a different design for each language. It's true that each language has its own APIs for how per-channel options are set, but the overall goal here is still to have a way to pass a set of options to be used in child channels. The semantics for that should be the same in all languages.

Please let me know if you have any questions. Thanks!

Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md Outdated
@AgraVator AgraVator requested a review from markdroth December 29, 2025 15:56
Comment thread A110-child-channel-plugins.md
Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md
Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md
Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md

@markdroth markdroth left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is looking much better!

Please let me know if you have any questions. Thanks!

Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md
Comment thread A110-child-channel-plugins.md Outdated

@markdroth markdroth left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is looking really good! The only really substantive remaining comment from me is the one from my last review pass about making sure we can plumb this into channels created via an LB policy or resolver.

Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md Outdated
Comment thread A110-child-channel-plugins.md Outdated
@AgraVator AgraVator requested a review from ejona86 March 25, 2026 09:24
Comment thread A110-child-channel-plugins.md
Comment thread A110-child-channel-plugins.md
@AgraVator AgraVator requested review from easwars and markdroth May 12, 2026 06:23
Comment thread A110-child-channel-plugins.md
Comment thread A110-child-channel-plugins.md Outdated
@AgraVator AgraVator requested a review from easwars June 15, 2026 15:21
Comment on lines +25 to +27
1. xDS: When a user creates a channel with an xDS target, the gRPC library
internally creates a separate channel to communicate with the xDS control
plane.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The XdsClient has the ability to create gRPC channels to multiple xDS management servers (as part of the support we added for federation). In Go (and I believe in C++), these gRPC channels are created lazily, i.e., at the time when a resource needs to be requested from management A, a gRPC channel is created to it.

Now, how does this work when we have multiple parent channels. Will the child options of the first parent channel, P1, that creates the XdsClient be applied to all child channels (even though P1 might not have anything to do with a child channel that was created when another parent channel P2 requested a resource from a different management server).

@AgraVator AgraVator Jun 22, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I had seen that. But I felt it didn't quite address the nuance involved with the XdsClient in the sense that it can create multiple child channels, and not all of them are created at the same time and not all of them as a result of resource watches created by a single parent.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the behavior we'd want here is to pass the child channel options to the XdsClient when the XdsClient is created, and then that XdsClient instance will use those same child channel options for any child channel it creates over the lifetime of the XdsClient.

I don't see any other way this could reasonably work, because after the XdsClient is created, there's no other place where we'd pass down channel options to use from a "parent" channel.

@markdroth markdroth left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just one small remaining comment, otherwise looks great!


* Java: The `Helper` will provide a function that accepts a `ChannelBuilder` and applies the child channel options to it.
* Go: A new field will be added to the `BuildOptions` struct (passed when creating a resolver or LB policy) to contain the child channel options.
* C-core: No special plumbing is needed because the child channel args are simply passed as channel arguments, which are already available to LB policies.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should also say that the LB policy will need to propagate both the individual child channel args and the arg containing the child channel args to the child channel.

Comment on lines +25 to +27
1. xDS: When a user creates a channel with an xDS target, the gRPC library
internally creates a separate channel to communicate with the xDS control
plane.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the behavior we'd want here is to pass the child channel options to the XdsClient when the XdsClient is created, and then that XdsClient instance will use those same child channel options for any child channel it creates over the lifetime of the XdsClient.

I don't see any other way this could reasonably work, because after the XdsClient is created, there's no other place where we'd pass down channel options to use from a "parent" channel.

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.

8 participants