Skip to content

Commit 7d98147

Browse files
committed
refactor getNameResolverProvider()
1 parent e67c0cb commit 7d98147

File tree

3 files changed

+52
-10
lines changed

3 files changed

+52
-10
lines changed

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1472,8 +1472,9 @@ public ClientTransportFactory buildClientTransportFactory() {
14721472
channelCreds,
14731473
callCredentials,
14741474
transportFactoryBuilder,
1475-
new FixedPortProvider(nameResolverArgs.getDefaultPort()))
1476-
.nameResolverRegistry(nameResolverRegistry);
1475+
new FixedPortProvider(nameResolverArgs.getDefaultPort()),
1476+
nameResolverRegistry,
1477+
null /* nameResolverProvider */);
14771478
}
14781479

14791480
@Override

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

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,8 @@ public static ManagedChannelBuilder<?> forTarget(String target) {
177177
@Nullable
178178
String authorityOverride;
179179

180+
boolean registryProvided;
181+
180182
String defaultLbPolicy = GrpcUtil.DEFAULT_LB_POLICY;
181183

182184
boolean fullStreamDecompression;
@@ -343,6 +345,7 @@ public ManagedChannelImplBuilder(
343345
}
344346
if (nameResolverRegistry != null) {
345347
this.nameResolverRegistry = nameResolverRegistry;
348+
this.registryProvided = true;
346349
}
347350
if (nameResolverProvider != null) {
348351
this.nameResolverProvider = nameResolverProvider;
@@ -467,6 +470,8 @@ public ManagedChannelImplBuilder nameResolverFactory(NameResolver.Factory resolv
467470
Preconditions.checkState(directServerAddress == null,
468471
"directServerAddress is set (%s), which forbids the use of NameResolverFactory",
469472
directServerAddress);
473+
Preconditions.checkState(!registryProvided,
474+
"NameResolverRegistry is already set, which forbids the use of NameResolverFactory");
470475
if (resolverFactory != null) {
471476
NameResolverRegistry reg = new NameResolverRegistry();
472477
if (resolverFactory instanceof NameResolverProvider) {
@@ -481,16 +486,11 @@ public ManagedChannelImplBuilder nameResolverFactory(NameResolver.Factory resolv
481486
return this;
482487
}
483488

484-
public ManagedChannelImplBuilder nameResolverRegistry(NameResolverRegistry resolverRegistry) {
489+
ManagedChannelImplBuilder nameResolverRegistry(NameResolverRegistry resolverRegistry) {
485490
this.nameResolverRegistry = resolverRegistry;
486491
return this;
487492
}
488493

489-
public ManagedChannelImplBuilder nameResolverProvider(NameResolverProvider provider) {
490-
this.nameResolverProvider = provider;
491-
return this;
492-
}
493-
494494
@Override
495495
public ManagedChannelImplBuilder defaultLoadBalancingPolicy(String policy) {
496496
Preconditions.checkState(directServerAddress == null,
@@ -923,15 +923,21 @@ static ResolvedNameResolver getNameResolverProvider(
923923
// the provider's default scheme (if provider is specified).
924924
String scheme = (provider != null)
925925
? provider.getDefaultScheme()
926-
: nameResolverRegistry.getDefaultScheme();
926+
: (nameResolverProvider != null
927+
? nameResolverProvider.getDefaultScheme()
928+
: nameResolverRegistry.getDefaultScheme());
927929
try {
928930
targetUri = new URI(scheme, "", "/" + target, null);
929931
} catch (URISyntaxException e) {
930932
// Should not happen because we just validated the URI.
931933
throw new IllegalArgumentException(e);
932934
}
933935
if (provider == null) {
934-
provider = nameResolverRegistry.getProviderForScheme(targetUri.getScheme());
936+
if (nameResolverProvider != null) {
937+
provider = nameResolverProvider;
938+
} else {
939+
provider = nameResolverRegistry.getProviderForScheme(targetUri.getScheme());
940+
}
935941
}
936942
}
937943

core/src/test/java/io/grpc/internal/ManagedChannelImplBuilderTest.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import static org.junit.Assert.assertThrows;
2727
import static org.junit.Assert.assertTrue;
2828
import static org.junit.Assert.fail;
29+
import static org.mockito.ArgumentMatchers.any;
2930
import static org.mockito.Mockito.doReturn;
3031
import static org.mockito.Mockito.mock;
3132
import static org.mockito.Mockito.verify;
@@ -48,6 +49,7 @@
4849
import io.grpc.MethodDescriptor;
4950
import io.grpc.MetricSink;
5051
import io.grpc.NameResolver;
52+
import io.grpc.NameResolverProvider;
5153
import io.grpc.NameResolverRegistry;
5254
import io.grpc.StaticTestingClassLoader;
5355
import io.grpc.internal.ManagedChannelImplBuilder.ChannelBuilderDefaultPortProvider;
@@ -249,6 +251,39 @@ public void nameResolverFactory_notAllowedWithDirectAddress() {
249251
directAddressBuilder.nameResolverFactory(mock(NameResolver.Factory.class));
250252
}
251253

254+
@Test(expected = IllegalStateException.class)
255+
@SuppressWarnings("deprecation")
256+
public void nameResolverFactory_notAllowedWithRegistry() {
257+
builder = new ManagedChannelImplBuilder(
258+
DUMMY_TARGET,
259+
null,
260+
null,
261+
new UnsupportedClientTransportFactoryBuilder(),
262+
null,
263+
new NameResolverRegistry(),
264+
null);
265+
builder.nameResolverFactory(mock(NameResolver.Factory.class));
266+
}
267+
268+
@Test
269+
public void getNameResolverProvider_explicitProviderWithIpTarget() {
270+
NameResolverProvider explicitProvider = mock(NameResolverProvider.class);
271+
when(explicitProvider.getDefaultScheme()).thenReturn("explicit");
272+
when(explicitProvider.newNameResolver(any(URI.class), any(NameResolver.Args.class)))
273+
.thenReturn(mock(NameResolver.class));
274+
275+
// IP address target, likely to fail URI parsing or not match URI pattern
276+
String target = "127.0.0.1:8080";
277+
278+
ManagedChannelImplBuilder.ResolvedNameResolver resolved =
279+
ManagedChannelImplBuilder.getNameResolverProvider(
280+
target,
281+
new NameResolverRegistry(),
282+
explicitProvider);
283+
284+
assertSame(explicitProvider, resolved.provider);
285+
}
286+
252287
@Test
253288
public void defaultLoadBalancingPolicy_default() {
254289
assertEquals("pick_first", builder.defaultLbPolicy);

0 commit comments

Comments
 (0)