Skip to content

Commit e65d7ca

Browse files
committed
use constructor instead of public method
1 parent 0e436bb commit e65d7ca

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
@@ -243,6 +243,53 @@ public NewChannelBuilderResult newChannelBuilder(
243243
mcb);
244244
}
245245

246+
@Test
247+
public void newChannelBuilder_propagatesRegistry() {
248+
final NameResolverRegistry nameResolverRegistry = new NameResolverRegistry();
249+
class SocketAddress1 extends SocketAddress {
250+
}
251+
252+
ManagedChannelRegistry registry = new ManagedChannelRegistry();
253+
class MockChannelBuilder extends ForwardingChannelBuilder2<MockChannelBuilder> {
254+
@Override
255+
public ManagedChannelBuilder<?> delegate() {
256+
throw new UnsupportedOperationException();
257+
}
258+
}
259+
260+
final ManagedChannelBuilder<?> mcb = new MockChannelBuilder();
261+
registry.register(new BaseProvider(true, 4) {
262+
@Override
263+
protected Collection<Class<? extends SocketAddress>> getSupportedSocketAddressTypes() {
264+
return Collections.singleton(SocketAddress1.class);
265+
}
266+
267+
@Override
268+
public NewChannelBuilderResult newChannelBuilder(
269+
String passedTarget, ChannelCredentials passedCreds,
270+
NameResolverRegistry passedRegistry, NameResolverProvider passedProvider) {
271+
assertThat(passedRegistry).isSameInstanceAs(nameResolverRegistry);
272+
return NewChannelBuilderResult.channelBuilder(mcb);
273+
}
274+
});
275+
276+
// ManagedChannelRegistry.newChannelBuilder(NameResolverRegistry, String, ChannelCredentials)
277+
// gets the scheme from target. Then it gets NameResolverProvider from registry for that scheme.
278+
// Then it gets producedSocketAddressTypes from that provider.
279+
// Then it finds a ManagedChannelProvider that supports those types.
280+
// So we need a registered NameResolverProvider for the scheme.
281+
nameResolverRegistry.register(new BaseNameResolverProvider(true, 5, "sc1") {
282+
@Override
283+
public Collection<Class<? extends SocketAddress>> getProducedSocketAddressTypes() {
284+
return Collections.singleton(SocketAddress1.class);
285+
}
286+
});
287+
288+
assertThat(
289+
registry.newChannelBuilder(nameResolverRegistry, "sc1:" + target, creds)).isSameInstanceAs(
290+
mcb);
291+
}
292+
246293
@Test
247294
public void newChannelBuilder_unsupportedSocketAddressTypes() {
248295
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
@@ -309,6 +309,49 @@ public ManagedChannelImplBuilder(
309309
InternalConfiguratorRegistry.configureChannelBuilder(this);
310310
}
311311

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

441-
public ManagedChannelImplBuilder nameResolverRegistry(NameResolverRegistry resolverRegistry) {
484+
ManagedChannelImplBuilder nameResolverRegistry(NameResolverRegistry resolverRegistry) {
442485
this.nameResolverRegistry = resolverRegistry;
443486
return this;
444487
}
445488

446-
public ManagedChannelImplBuilder nameResolverProvider(NameResolverProvider provider) {
447-
this.nameResolverProvider = provider;
448-
return this;
449-
}
450-
451489
@Override
452490
public ManagedChannelImplBuilder defaultLoadBalancingPolicy(String policy) {
453491
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)