Skip to content

A110: Child Channel Options#529

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

A110: Child Channel Options#529
AgraVator wants to merge 17 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 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.

Just one small remaining comment, otherwise looks great!

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

* 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 thread A110-child-channel-plugins.md Outdated

1. It retrieves `O_child` from `P`.
2. It applies `O_child` to the configuration of `C`.
3. It should also configure channel `C` to use `O_child` for its children.

@ejona86 ejona86 Jun 30, 2026

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.

In "LB Policies and Resolvers", C-core has it pretty explicit which component is responsible for this ("configure channel C to use O_child"). It isn't clear to me which internal component is responsible in Go and Java. And looking at grpc/grpc-java#12578, I don't see this done at all.

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.

In GrpcXdsTransportFactory, the constructor for GrpcXdsTransport after configuring the xDS control plane child channel using channelConfigurator, should pass it recursively:

ManagedChannelBuilder<?> channelBuilder = Grpc.newChannelBuilder(target, channelCredentials)
            .keepAliveTime(5, TimeUnit.MINUTES);
channelConfigurator.configureChannelBuilder(channelBuilder);
// Missing: channelBuilder.childChannelConfigurator(channelConfigurator);

In ManagedChannelImpl, inside createResolvingOobChannelBuilder helper, out-of-band channels are created and configured, but the configurator is not recursively set:

    ResolvingOobChannelBuilder builder = new ResolvingOobChannelBuilder();
   // Configures the channel C (the OOB channel)
   channelConfigurator.configureChannelBuilder(builder);
     
   // Missing: builder.childChannelConfigurator(channelConfigurator);

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