Skip to content

Commit a669034

Browse files
committed
use constructor instead of public method
1 parent 4ee3512 commit a669034

7 files changed

Lines changed: 117 additions & 53 deletions

File tree

api/src/main/java/io/grpc/NameResolver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ public abstract static class Factory {
191191
*/
192192
public NameResolver newNameResolver(Uri targetUri, final Args args) {
193193
// Not every io.grpc.Uri can be converted but in the ordinary ManagedChannel creation flow,
194-
// any IllegalArgumentException thrown here would happened anyway, just earlier. That's
194+
// any IllegalArgumentException thrown here would have happened anyway, just earlier. That's
195195
// because parse/toString is transparent so java.net.URI#create here sees the original target
196196
// string just like it did before the io.grpc.Uri migration.
197197
//

api/src/test/java/io/grpc/ManagedChannelRegistryTest.java

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,53 @@ public NewChannelBuilderResult newChannelBuilder(
223223
mcb);
224224
}
225225

226+
@Test
227+
public void newChannelBuilder_propagatesRegistry() {
228+
final NameResolverRegistry nameResolverRegistry = new NameResolverRegistry();
229+
class SocketAddress1 extends SocketAddress {
230+
}
231+
232+
ManagedChannelRegistry registry = new ManagedChannelRegistry();
233+
class MockChannelBuilder extends ForwardingChannelBuilder2<MockChannelBuilder> {
234+
@Override
235+
public ManagedChannelBuilder<?> delegate() {
236+
throw new UnsupportedOperationException();
237+
}
238+
}
239+
240+
final ManagedChannelBuilder<?> mcb = new MockChannelBuilder();
241+
registry.register(new BaseProvider(true, 4) {
242+
@Override
243+
protected Collection<Class<? extends SocketAddress>> getSupportedSocketAddressTypes() {
244+
return Collections.singleton(SocketAddress1.class);
245+
}
246+
247+
@Override
248+
public NewChannelBuilderResult newChannelBuilder(
249+
String passedTarget, ChannelCredentials passedCreds,
250+
NameResolverRegistry passedRegistry, NameResolverProvider passedProvider) {
251+
assertThat(passedRegistry).isSameInstanceAs(nameResolverRegistry);
252+
return NewChannelBuilderResult.channelBuilder(mcb);
253+
}
254+
});
255+
256+
// ManagedChannelRegistry.newChannelBuilder(NameResolverRegistry, String, ChannelCredentials)
257+
// gets the scheme from target. Then it gets NameResolverProvider from registry for that scheme.
258+
// Then it gets producedSocketAddressTypes from that provider.
259+
// Then it finds a ManagedChannelProvider that supports those types.
260+
// So we need a registered NameResolverProvider for the scheme.
261+
nameResolverRegistry.register(new BaseNameResolverProvider(true, 5, "sc1") {
262+
@Override
263+
public Collection<Class<? extends SocketAddress>> getProducedSocketAddressTypes() {
264+
return Collections.singleton(SocketAddress1.class);
265+
}
266+
});
267+
268+
assertThat(
269+
registry.newChannelBuilder(nameResolverRegistry, "sc1:" + target, creds)).isSameInstanceAs(
270+
mcb);
271+
}
272+
226273
@Test
227274
public void newChannelBuilder_unsupportedSocketAddressTypes() {
228275
NameResolverRegistry nameResolverRegistry = new NameResolverRegistry();

core/src/main/java/io/grpc/internal/ManagedChannelImplBuilder.java

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,49 @@ public ManagedChannelImplBuilder(
318318
InternalConfiguratorRegistry.configureChannelBuilder(this);
319319
}
320320

321+
/**
322+
* Creates a new managed channel builder with a target string, which can be
323+
* either a valid {@link io.grpc.NameResolver}-compliant URI, or an authority
324+
* string. Transport
325+
* implementors must provide client transport factory builder, and may set
326+
* custom channel default
327+
* port provider.
328+
*
329+
* @param channelCreds The ChannelCredentials provided by the user.
330+
* These may be used when
331+
* creating derivative channels.
332+
* @param nameResolverRegistry the registry used to look up name resolvers.
333+
* @param nameResolverProvider the provider used to look up name resolvers.
334+
*/
335+
public ManagedChannelImplBuilder(
336+
String target, @Nullable ChannelCredentials channelCreds, @Nullable CallCredentials callCreds,
337+
ClientTransportFactoryBuilder clientTransportFactoryBuilder,
338+
@Nullable ChannelBuilderDefaultPortProvider channelBuilderDefaultPortProvider,
339+
@Nullable NameResolverRegistry nameResolverRegistry,
340+
@Nullable NameResolverProvider nameResolverProvider) {
341+
this.target = checkNotNull(target, "target");
342+
this.channelCredentials = channelCreds;
343+
this.callCredentials = callCreds;
344+
this.clientTransportFactoryBuilder = checkNotNull(clientTransportFactoryBuilder,
345+
"clientTransportFactoryBuilder");
346+
this.directServerAddress = null;
347+
348+
if (channelBuilderDefaultPortProvider != null) {
349+
this.channelBuilderDefaultPortProvider = channelBuilderDefaultPortProvider;
350+
} else {
351+
this.channelBuilderDefaultPortProvider = new ManagedChannelDefaultPortProvider();
352+
}
353+
if (nameResolverRegistry != null) {
354+
this.nameResolverRegistry = nameResolverRegistry;
355+
}
356+
if (nameResolverProvider != null) {
357+
this.nameResolverProvider = nameResolverProvider;
358+
}
359+
360+
// TODO(dnvindhya): Move configurator to all the individual builders
361+
InternalConfiguratorRegistry.configureChannelBuilder(this);
362+
}
363+
321364
/**
322365
* Returns a target string for the SocketAddress. It is only used as a placeholder, because
323366
* DirectAddressNameResolverProvider will not actually try to use it. However, it must be a valid
@@ -447,16 +490,11 @@ public ManagedChannelImplBuilder nameResolverFactory(NameResolver.Factory resolv
447490
return this;
448491
}
449492

450-
public ManagedChannelImplBuilder nameResolverRegistry(NameResolverRegistry resolverRegistry) {
493+
ManagedChannelImplBuilder nameResolverRegistry(NameResolverRegistry resolverRegistry) {
451494
this.nameResolverRegistry = resolverRegistry;
452495
return this;
453496
}
454497

455-
public ManagedChannelImplBuilder nameResolverProvider(NameResolverProvider provider) {
456-
this.nameResolverProvider = provider;
457-
return this;
458-
}
459-
460498
@Override
461499
public ManagedChannelImplBuilder defaultLoadBalancingPolicy(String policy) {
462500
Preconditions.checkState(directServerAddress == null,

netty/src/main/java/io/grpc/netty/NettyChannelBuilder.java

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -209,10 +209,20 @@ public int getDefaultPort() {
209209
NettyChannelBuilder(
210210
String target, ChannelCredentials channelCreds, CallCredentials callCreds,
211211
ProtocolNegotiator.ClientFactory negotiator) {
212+
this(target, channelCreds, callCreds, negotiator, null, null);
213+
}
214+
215+
NettyChannelBuilder(
216+
String target, ChannelCredentials channelCreds, CallCredentials callCreds,
217+
ProtocolNegotiator.ClientFactory negotiator,
218+
NameResolverRegistry nameResolverRegistry,
219+
NameResolverProvider nameResolverProvider) {
212220
managedChannelImplBuilder = new ManagedChannelImplBuilder(
213221
target, channelCreds, callCreds,
214222
new NettyChannelTransportFactoryBuilder(),
215-
new NettyChannelDefaultPortProvider());
223+
new NettyChannelDefaultPortProvider(),
224+
nameResolverRegistry,
225+
nameResolverProvider);
216226
this.protocolNegotiatorFactory = checkNotNull(negotiator, "negotiator");
217227
this.freezeProtocolNegotiatorFactory = true;
218228
}
@@ -710,23 +720,7 @@ NettyChannelBuilder setTransportTracerFactory(TransportTracer.Factory transportT
710720
return this;
711721
}
712722

713-
/**
714-
* Sets the registry used for looking up name resolvers.
715-
*/
716-
@CanIgnoreReturnValue
717-
public NettyChannelBuilder nameResolverRegistry(NameResolverRegistry registry) {
718-
managedChannelImplBuilder.nameResolverRegistry(registry);
719-
return this;
720-
}
721723

722-
/**
723-
* Sets the {@link io.grpc.NameResolverProvider} to use.
724-
*/
725-
@CanIgnoreReturnValue
726-
public NettyChannelBuilder nameResolverProvider(NameResolverProvider provider) {
727-
managedChannelImplBuilder.nameResolverProvider(provider);
728-
return this;
729-
}
730724

731725
static Collection<Class<? extends SocketAddress>> getSupportedSocketAddressTypes() {
732726
return Collections.singleton(InetSocketAddress.class);

netty/src/main/java/io/grpc/netty/NettyChannelProvider.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,7 @@ public NewChannelBuilderResult newChannelBuilder(String target, ChannelCredentia
6666
return NewChannelBuilderResult.error(result.error);
6767
}
6868
NettyChannelBuilder builder = new NettyChannelBuilder(target, creds,
69-
result.callCredentials, result.negotiator);
70-
if (nameResolverRegistry != null) {
71-
builder.nameResolverRegistry(nameResolverRegistry);
72-
}
73-
if (nameResolverProvider != null) {
74-
builder.nameResolverProvider(nameResolverProvider);
75-
}
69+
result.callCredentials, result.negotiator, nameResolverRegistry, nameResolverProvider);
7670
return NewChannelBuilderResult.channelBuilder(builder);
7771
}
7872

okhttp/src/main/java/io/grpc/okhttp/OkHttpChannelBuilder.java

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -216,10 +216,20 @@ private OkHttpChannelBuilder(String target) {
216216
OkHttpChannelBuilder(
217217
String target, ChannelCredentials channelCreds, CallCredentials callCreds,
218218
SSLSocketFactory factory) {
219+
this(target, channelCreds, callCreds, factory, null, null);
220+
}
221+
222+
OkHttpChannelBuilder(
223+
String target, ChannelCredentials channelCreds, CallCredentials callCreds,
224+
SSLSocketFactory factory,
225+
NameResolverRegistry nameResolverRegistry,
226+
NameResolverProvider nameResolverProvider) {
219227
managedChannelImplBuilder = new ManagedChannelImplBuilder(
220228
target, channelCreds, callCreds,
221229
new OkHttpChannelTransportFactoryBuilder(),
222-
new OkHttpChannelDefaultPortProvider());
230+
new OkHttpChannelDefaultPortProvider(),
231+
nameResolverRegistry,
232+
nameResolverProvider);
223233
this.sslSocketFactory = factory;
224234
this.negotiationType = factory == null ? NegotiationType.PLAINTEXT : NegotiationType.TLS;
225235
this.freezeSecurityConfiguration = true;
@@ -590,21 +600,7 @@ SSLSocketFactory createSslSocketFactory() {
590600
}
591601
}
592602

593-
/**
594-
* Sets the registry used for looking up name resolvers.
595-
*/
596-
public OkHttpChannelBuilder nameResolverRegistry(NameResolverRegistry registry) {
597-
managedChannelImplBuilder.nameResolverRegistry(registry);
598-
return this;
599-
}
600603

601-
/**
602-
* Sets the {@link NameResolverProvider} to use.
603-
*/
604-
public OkHttpChannelBuilder nameResolverProvider(NameResolverProvider provider) {
605-
managedChannelImplBuilder.nameResolverProvider(provider);
606-
return this;
607-
}
608604

609605
private static final EnumSet<TlsChannelCredentials.Feature> understoodTlsFeatures =
610606
EnumSet.of(

okhttp/src/main/java/io/grpc/okhttp/OkHttpChannelProvider.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,8 @@ public NewChannelBuilderResult newChannelBuilder(String target, ChannelCredentia
7272
return NewChannelBuilderResult.error(result.error);
7373
}
7474
OkHttpChannelBuilder builder = new OkHttpChannelBuilder(
75-
target, creds, result.callCredentials, result.factory);
76-
if (nameResolverRegistry != null) {
77-
builder.nameResolverRegistry(nameResolverRegistry);
78-
}
79-
if (nameResolverProvider != null) {
80-
builder.nameResolverProvider(nameResolverProvider);
81-
}
75+
target, creds, result.callCredentials, result.factory,
76+
nameResolverRegistry, nameResolverProvider);
8277
return NewChannelBuilderResult.channelBuilder(builder);
8378
}
8479

0 commit comments

Comments
 (0)