Skip to content

Commit 15fc70b

Browse files
core, netty, okhttp: implement new logic for nameResolverFactory API in channelBuilder (#10590)
* core, netty, okhttp: implement new logic for nameResolverFactory API in channelBuilder fix ManagedChannelImpl to use NameResolverRegistry instead of NameResolverFactory fix the ManagedChannelImplBuilder and remove nameResolverFactory * Integrate target parsing and NameResolverProvider searching Actually creating the name resolver is now delayed to the end of ManagedChannelImpl.getNameResolver; we don't want to call into the name resolver to determine if we should use the name resolver. Added getDefaultScheme() to NameResolverRegistry to avoid needing NameResolver.Factory. --------- Co-authored-by: Eric Anderson <[email protected]>
1 parent 9888a54 commit 15fc70b

File tree

42 files changed

+796
-118
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+796
-118
lines changed

alts/src/main/java/io/grpc/alts/HandshakerServiceChannel.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import io.netty.channel.nio.NioEventLoopGroup;
2828
import io.netty.channel.socket.nio.NioSocketChannel;
2929
import io.netty.util.concurrent.DefaultThreadFactory;
30+
import java.net.InetSocketAddress;
3031
import java.util.concurrent.TimeUnit;
3132

3233
/**
@@ -57,7 +58,7 @@ public Channel create() {
5758
EventLoopGroup eventGroup =
5859
new NioEventLoopGroup(1, new DefaultThreadFactory("handshaker pool", true));
5960
ManagedChannel channel = NettyChannelBuilder.forTarget(target)
60-
.channelType(NioSocketChannel.class)
61+
.channelType(NioSocketChannel.class, InetSocketAddress.class)
6162
.directExecutor()
6263
.eventLoopGroup(eventGroup)
6364
.usePlaintext()

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -161,13 +161,13 @@ ManagedChannelBuilder<?> newChannelBuilder(NameResolverRegistry nameResolverRegi
161161
NameResolverProvider nameResolverProvider = null;
162162
try {
163163
URI uri = new URI(target);
164-
nameResolverProvider = nameResolverRegistry.providers().get(uri.getScheme());
164+
nameResolverProvider = nameResolverRegistry.getProviderForScheme(uri.getScheme());
165165
} catch (URISyntaxException ignore) {
166166
// bad URI found, just ignore and continue
167167
}
168168
if (nameResolverProvider == null) {
169-
nameResolverProvider = nameResolverRegistry.providers().get(
170-
nameResolverRegistry.asFactory().getDefaultScheme());
169+
nameResolverProvider = nameResolverRegistry.getProviderForScheme(
170+
nameResolverRegistry.getDefaultScheme());
171171
}
172172
Collection<Class<? extends SocketAddress>> nameResolverSocketAddressTypes
173173
= (nameResolverProvider != null)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ protected String getScheme() {
7575
*
7676
* @return the {@link SocketAddress} types this provider's name-resolver is capable of producing.
7777
*/
78-
protected Collection<Class<? extends SocketAddress>> getProducedSocketAddressTypes() {
78+
public Collection<Class<? extends SocketAddress>> getProducedSocketAddressTypes() {
7979
return Collections.singleton(InetSocketAddress.class);
8080
}
8181
}

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

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,16 @@ public final class NameResolverRegistry {
5858
@GuardedBy("this")
5959
private ImmutableMap<String, NameResolverProvider> effectiveProviders = ImmutableMap.of();
6060

61+
public synchronized String getDefaultScheme() {
62+
return defaultScheme;
63+
}
64+
65+
public NameResolverProvider getProviderForScheme(String scheme) {
66+
if (scheme == null) {
67+
return null;
68+
}
69+
return providers().get(scheme.toLowerCase(Locale.US));
70+
}
6171

6272
/**
6373
* Register a provider.
@@ -163,19 +173,13 @@ private final class NameResolverFactory extends NameResolver.Factory {
163173
@Override
164174
@Nullable
165175
public NameResolver newNameResolver(URI targetUri, NameResolver.Args args) {
166-
String scheme = targetUri.getScheme();
167-
if (scheme == null) {
168-
return null;
169-
}
170-
NameResolverProvider provider = providers().get(scheme.toLowerCase(Locale.US));
176+
NameResolverProvider provider = getProviderForScheme(targetUri.getScheme());
171177
return provider == null ? null : provider.newNameResolver(targetUri, args);
172178
}
173179

174180
@Override
175181
public String getDefaultScheme() {
176-
synchronized (NameResolverRegistry.this) {
177-
return defaultScheme;
178-
}
182+
return NameResolverRegistry.this.getDefaultScheme();
179183
}
180184
}
181185

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -173,13 +173,13 @@ class SocketAddress2 extends SocketAddress {
173173

174174
nameResolverRegistry.register(new BaseNameResolverProvider(true, 5, "sc1") {
175175
@Override
176-
protected Collection<Class<? extends SocketAddress>> getProducedSocketAddressTypes() {
176+
public Collection<Class<? extends SocketAddress>> getProducedSocketAddressTypes() {
177177
return Collections.singleton(SocketAddress1.class);
178178
}
179179
});
180180
nameResolverRegistry.register(new BaseNameResolverProvider(true, 6, "sc2") {
181181
@Override
182-
protected Collection<Class<? extends SocketAddress>> getProducedSocketAddressTypes() {
182+
public Collection<Class<? extends SocketAddress>> getProducedSocketAddressTypes() {
183183
fail("Should not be called");
184184
throw new AssertionError();
185185
}
@@ -234,7 +234,7 @@ class SocketAddress2 extends SocketAddress {
234234

235235
nameResolverRegistry.register(new BaseNameResolverProvider(true, 5, "sc1") {
236236
@Override
237-
protected Collection<Class<? extends SocketAddress>> getProducedSocketAddressTypes() {
237+
public Collection<Class<? extends SocketAddress>> getProducedSocketAddressTypes() {
238238
return ImmutableSet.of(SocketAddress1.class, SocketAddress2.class);
239239
}
240240
});
@@ -314,7 +314,7 @@ class SocketAddress1 extends SocketAddress {
314314

315315
nameResolverRegistry.register(new BaseNameResolverProvider(true, 5, "sc1") {
316316
@Override
317-
protected Collection<Class<? extends SocketAddress>> getProducedSocketAddressTypes() {
317+
public Collection<Class<? extends SocketAddress>> getProducedSocketAddressTypes() {
318318
return Collections.singleton(SocketAddress1.class);
319319
}
320320
});

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,12 +203,14 @@ public void newNameResolver_noProvider() {
203203
public void baseProviders() {
204204
Map<String, NameResolverProvider> providers =
205205
NameResolverRegistry.getDefaultRegistry().providers();
206-
assertThat(providers).hasSize(1);
206+
assertThat(providers).hasSize(2);
207207
// 2 name resolvers from grpclb and core, higher priority one is returned.
208208
assertThat(providers.get("dns").getClass().getName())
209209
.isEqualTo("io.grpc.grpclb.SecretGrpclbNameResolverProvider$Provider");
210210
assertThat(NameResolverRegistry.getDefaultRegistry().asFactory().getDefaultScheme())
211211
.isEqualTo("dns");
212+
assertThat(providers.get("inprocess").getClass().getName())
213+
.isEqualTo("io.grpc.inprocess.InProcessNameResolverProvider");
212214
}
213215

214216
@Test

benchmarks/src/jmh/java/io/grpc/benchmarks/TransportBenchmark.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ public void setUp() throws Exception {
110110
.channelType(LocalServerChannel.class);
111111
channelBuilder = NettyChannelBuilder.forAddress(address)
112112
.eventLoopGroup(group)
113-
.channelType(LocalChannel.class)
113+
.channelType(LocalChannel.class, LocalAddress.class)
114114
.negotiationType(NegotiationType.PLAINTEXT);
115115
groupToShutdown = group;
116116
break;
@@ -134,7 +134,7 @@ public void setUp() throws Exception {
134134
.asSubclass(Channel.class);
135135
channelBuilder = NettyChannelBuilder.forAddress(address)
136136
.eventLoopGroup(group)
137-
.channelType(channelClass)
137+
.channelType(channelClass, InetSocketAddress.class)
138138
.negotiationType(NegotiationType.PLAINTEXT);
139139
groupToShutdown = group;
140140
break;

benchmarks/src/jmh/java/io/grpc/benchmarks/netty/AbstractBenchmark.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ public void setup(ExecutorType clientExecutor,
207207
serverBuilder = NettyServerBuilder.forAddress(address, serverCreds);
208208
serverBuilder.channelType(LocalServerChannel.class);
209209
channelBuilder = NettyChannelBuilder.forAddress(address);
210-
channelBuilder.channelType(LocalChannel.class);
210+
channelBuilder.channelType(LocalChannel.class, LocalAddress.class);
211211
} else {
212212
ServerSocket sock = new ServerSocket();
213213
// Pick a port using an ephemeral socket.
@@ -216,7 +216,8 @@ public void setup(ExecutorType clientExecutor,
216216
sock.close();
217217
serverBuilder = NettyServerBuilder.forAddress(address, serverCreds)
218218
.channelType(NioServerSocketChannel.class);
219-
channelBuilder = NettyChannelBuilder.forAddress(address).channelType(NioSocketChannel.class);
219+
channelBuilder = NettyChannelBuilder.forAddress(address).channelType(NioSocketChannel.class,
220+
InetSocketAddress.class);
220221
}
221222

222223
if (serverExecutor == ExecutorType.DIRECT) {

benchmarks/src/main/java/io/grpc/benchmarks/Utils.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -130,21 +130,21 @@ private static NettyChannelBuilder configureNetty(
130130
case NETTY_NIO:
131131
builder
132132
.eventLoopGroup(new NioEventLoopGroup(0, tf))
133-
.channelType(NioSocketChannel.class);
133+
.channelType(NioSocketChannel.class, InetSocketAddress.class);
134134
break;
135135

136136
case NETTY_EPOLL:
137137
// These classes only work on Linux.
138138
builder
139139
.eventLoopGroup(new EpollEventLoopGroup(0, tf))
140-
.channelType(EpollSocketChannel.class);
140+
.channelType(EpollSocketChannel.class, InetSocketAddress.class);
141141
break;
142142

143143
case NETTY_UNIX_DOMAIN_SOCKET:
144144
// These classes only work on Linux.
145145
builder
146146
.eventLoopGroup(new EpollEventLoopGroup(0, tf))
147-
.channelType(EpollDomainSocketChannel.class);
147+
.channelType(EpollDomainSocketChannel.class, DomainSocketAddress.class);
148148
break;
149149

150150
default:

binder/src/main/java/io/grpc/binder/BinderChannelBuilder.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939
import io.grpc.internal.ObjectPool;
4040
import io.grpc.internal.SharedResourcePool;
4141
import java.net.SocketAddress;
42+
import java.util.Collection;
43+
import java.util.Collections;
4244
import java.util.concurrent.Executor;
4345
import java.util.concurrent.ScheduledExecutorService;
4446
import java.util.concurrent.TimeUnit;
@@ -401,5 +403,10 @@ public void close() {
401403
executorService = scheduledExecutorPool.returnObject(executorService);
402404
offloadExecutor = offloadExecutorPool.returnObject(offloadExecutor);
403405
}
406+
407+
@Override
408+
public Collection<Class<? extends SocketAddress>> getSupportedSocketAddressTypes() {
409+
return Collections.singleton(AndroidComponentAddress.class);
410+
}
404411
}
405412
}

0 commit comments

Comments
 (0)