-
Notifications
You must be signed in to change notification settings - Fork 4k
Adds Grpc.newManagedChannel(String, ChannelCredentials, NameResolverR… #11901
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
base: master
Are you sure you want to change the base?
Changes from all commits
043b468
5e1b7b3
49f8dc4
a88e430
4288b51
0e436bb
e65d7ca
dd007ec
f3f49b6
3859ae5
7fc22d7
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -156,6 +156,9 @@ public static ManagedChannelBuilder<?> forTarget(String target) { | |
| private final List<ClientInterceptor> interceptors = new ArrayList<>(); | ||
| NameResolverRegistry nameResolverRegistry = NameResolverRegistry.getDefaultRegistry(); | ||
|
|
||
| @Nullable | ||
| NameResolverProvider nameResolverProvider; | ||
|
|
||
| final List<ClientTransportFilter> transportFilters = new ArrayList<>(); | ||
|
|
||
| final String target; | ||
|
|
@@ -291,18 +294,53 @@ public ManagedChannelImplBuilder( | |
| String target, @Nullable ChannelCredentials channelCreds, @Nullable CallCredentials callCreds, | ||
| ClientTransportFactoryBuilder clientTransportFactoryBuilder, | ||
| @Nullable ChannelBuilderDefaultPortProvider channelBuilderDefaultPortProvider) { | ||
| this( | ||
| target, | ||
| channelCreds, | ||
| callCreds, | ||
| clientTransportFactoryBuilder, | ||
| channelBuilderDefaultPortProvider, | ||
| null, | ||
| null); | ||
| } | ||
|
|
||
| /** | ||
| * Creates a new managed channel builder with a target string, which can be | ||
| * either a valid {@link io.grpc.NameResolver}-compliant URI, or an authority | ||
| * string. Transport | ||
| * implementors must provide client transport factory builder, and may set | ||
| * custom channel default | ||
| * port provider. | ||
| * | ||
| * @param channelCreds The ChannelCredentials provided by the user. | ||
| * These may be used when | ||
| * creating derivative channels. | ||
| * @param nameResolverRegistry the registry used to look up name resolvers. | ||
| * @param nameResolverProvider the provider used to look up name resolvers. | ||
| */ | ||
| public ManagedChannelImplBuilder( | ||
| String target, @Nullable ChannelCredentials channelCreds, @Nullable CallCredentials callCreds, | ||
| ClientTransportFactoryBuilder clientTransportFactoryBuilder, | ||
| @Nullable ChannelBuilderDefaultPortProvider channelBuilderDefaultPortProvider, | ||
| @Nullable NameResolverRegistry nameResolverRegistry, | ||
| @Nullable NameResolverProvider nameResolverProvider) { | ||
| this.target = checkNotNull(target, "target"); | ||
| this.channelCredentials = channelCreds; | ||
| this.callCredentials = callCreds; | ||
| this.clientTransportFactoryBuilder = checkNotNull(clientTransportFactoryBuilder, | ||
| "clientTransportFactoryBuilder"); | ||
| this.directServerAddress = null; | ||
|
|
||
| if (channelBuilderDefaultPortProvider != null) { | ||
| this.channelBuilderDefaultPortProvider = channelBuilderDefaultPortProvider; | ||
| } else { | ||
| this.channelBuilderDefaultPortProvider = new ManagedChannelDefaultPortProvider(); | ||
| } | ||
| this.channelBuilderDefaultPortProvider = | ||
| channelBuilderDefaultPortProvider != null | ||
| ? channelBuilderDefaultPortProvider | ||
| : new ManagedChannelDefaultPortProvider(); | ||
| this.nameResolverRegistry = | ||
| nameResolverRegistry != null | ||
| ? nameResolverRegistry | ||
| : NameResolverRegistry.getDefaultRegistry(); | ||
| this.nameResolverProvider = nameResolverProvider; | ||
|
|
||
| // TODO(dnvindhya): Move configurator to all the individual builders | ||
| InternalConfiguratorRegistry.configureChannelBuilder(this); | ||
| } | ||
|
|
@@ -422,6 +460,7 @@ public ManagedChannelImplBuilder nameResolverFactory(NameResolver.Factory resolv | |
| Preconditions.checkState(directServerAddress == null, | ||
| "directServerAddress is set (%s), which forbids the use of NameResolverFactory", | ||
| directServerAddress); | ||
|
|
||
| if (resolverFactory != null) { | ||
| NameResolverRegistry reg = new NameResolverRegistry(); | ||
| if (resolverFactory instanceof NameResolverProvider) { | ||
|
|
@@ -724,7 +763,7 @@ public ManagedChannel build() { | |
| ResolvedNameResolver resolvedResolver = | ||
| InternalFeatureFlags.getRfc3986UrisEnabled() | ||
| ? getNameResolverProviderRfc3986(target, nameResolverRegistry) | ||
| : getNameResolverProvider(target, nameResolverRegistry); | ||
| : getNameResolverProvider(target, nameResolverRegistry, nameResolverProvider); | ||
| resolvedResolver.checkAddressTypes(clientTransportFactory.getSupportedSocketAddressTypes()); | ||
| return new ManagedChannelOrphanWrapper(new ManagedChannelImpl( | ||
| this, | ||
|
|
@@ -845,7 +884,8 @@ void checkAddressTypes( | |
|
|
||
| @VisibleForTesting | ||
| static ResolvedNameResolver getNameResolverProvider( | ||
| String target, NameResolverRegistry nameResolverRegistry) { | ||
| String target, NameResolverRegistry nameResolverRegistry, | ||
| NameResolverProvider nameResolverProvider) { | ||
| // Finding a NameResolver. Try using the target string as the URI. If that fails, try prepending | ||
| // "dns:///". | ||
| NameResolverProvider provider = null; | ||
|
|
@@ -860,19 +900,33 @@ static ResolvedNameResolver getNameResolverProvider( | |
| if (targetUri != null) { | ||
| // For "localhost:8080" this would likely cause provider to be null, because "localhost" is | ||
| // parsed as the scheme. Will hit the next case and try "dns:///localhost:8080". | ||
| provider = nameResolverRegistry.getProviderForScheme(targetUri.getScheme()); | ||
| // Use the explicit provider if its scheme matches the target URI. | ||
| if (nameResolverProvider != null | ||
| && targetUri.getScheme().equals(nameResolverProvider.getDefaultScheme())) { | ||
| provider = nameResolverProvider; | ||
| } else { | ||
| provider = nameResolverRegistry.getProviderForScheme(targetUri.getScheme()); | ||
| } | ||
| } | ||
|
|
||
| if (provider == null && !URI_PATTERN.matcher(target).matches()) { | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why go through this code block if you will ignore the result?
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I still don't understand why this block was modified to check if provider is set. It looks like it can only break things. |
||
| // It doesn't look like a URI target. Maybe it's an authority string. Try with the default | ||
| // scheme from the registry. | ||
| // It doesn't look like a URI target. Maybe it's an authority string. Try with | ||
| // the default scheme from the registry (if provider is not specified) or | ||
| // the provider's default scheme (if provider is specified). | ||
| String scheme = nameResolverProvider != null | ||
| ? nameResolverProvider.getDefaultScheme() | ||
| : nameResolverRegistry.getDefaultScheme(); | ||
| try { | ||
| targetUri = new URI(nameResolverRegistry.getDefaultScheme(), "", "/" + target, null); | ||
| targetUri = new URI(scheme, "", "/" + target, null); | ||
| } catch (URISyntaxException e) { | ||
| // Should not be possible. | ||
| // Should not be possible | ||
| throw new IllegalArgumentException(e); | ||
| } | ||
| provider = nameResolverRegistry.getProviderForScheme(targetUri.getScheme()); | ||
| if (nameResolverProvider != null) { | ||
| provider = nameResolverProvider; | ||
| } else { | ||
| provider = nameResolverRegistry.getProviderForScheme(targetUri.getScheme()); | ||
| } | ||
| } | ||
|
|
||
| if (provider == null) { | ||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.