diff --git a/alts/src/main/java/io/grpc/alts/HandshakerServiceChannel.java b/alts/src/main/java/io/grpc/alts/HandshakerServiceChannel.java index 8e8d175b7af..169afe3078c 100644 --- a/alts/src/main/java/io/grpc/alts/HandshakerServiceChannel.java +++ b/alts/src/main/java/io/grpc/alts/HandshakerServiceChannel.java @@ -27,7 +27,6 @@ import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.util.concurrent.DefaultThreadFactory; -import java.net.InetSocketAddress; import java.util.concurrent.TimeUnit; /** @@ -58,7 +57,7 @@ public Channel create() { EventLoopGroup eventGroup = new NioEventLoopGroup(1, new DefaultThreadFactory("handshaker pool", true)); ManagedChannel channel = NettyChannelBuilder.forTarget(target) - .channelType(NioSocketChannel.class, InetSocketAddress.class) + .channelType(NioSocketChannel.class) .directExecutor() .eventLoopGroup(eventGroup) .usePlaintext() diff --git a/api/src/main/java/io/grpc/ManagedChannelRegistry.java b/api/src/main/java/io/grpc/ManagedChannelRegistry.java index 31f874b8094..04bdc6b0d57 100644 --- a/api/src/main/java/io/grpc/ManagedChannelRegistry.java +++ b/api/src/main/java/io/grpc/ManagedChannelRegistry.java @@ -161,13 +161,13 @@ ManagedChannelBuilder newChannelBuilder(NameResolverRegistry nameResolverRegi NameResolverProvider nameResolverProvider = null; try { URI uri = new URI(target); - nameResolverProvider = nameResolverRegistry.getProviderForScheme(uri.getScheme()); + nameResolverProvider = nameResolverRegistry.providers().get(uri.getScheme()); } catch (URISyntaxException ignore) { // bad URI found, just ignore and continue } if (nameResolverProvider == null) { - nameResolverProvider = nameResolverRegistry.getProviderForScheme( - nameResolverRegistry.getDefaultScheme()); + nameResolverProvider = nameResolverRegistry.providers().get( + nameResolverRegistry.asFactory().getDefaultScheme()); } Collection> nameResolverSocketAddressTypes = (nameResolverProvider != null) diff --git a/api/src/main/java/io/grpc/NameResolverProvider.java b/api/src/main/java/io/grpc/NameResolverProvider.java index 70e22e366d5..13cd750c36d 100644 --- a/api/src/main/java/io/grpc/NameResolverProvider.java +++ b/api/src/main/java/io/grpc/NameResolverProvider.java @@ -75,7 +75,7 @@ protected String getScheme() { * * @return the {@link SocketAddress} types this provider's name-resolver is capable of producing. */ - public Collection> getProducedSocketAddressTypes() { + protected Collection> getProducedSocketAddressTypes() { return Collections.singleton(InetSocketAddress.class); } } diff --git a/api/src/main/java/io/grpc/NameResolverRegistry.java b/api/src/main/java/io/grpc/NameResolverRegistry.java index 23eec23fd6a..37dd9283297 100644 --- a/api/src/main/java/io/grpc/NameResolverRegistry.java +++ b/api/src/main/java/io/grpc/NameResolverRegistry.java @@ -58,16 +58,6 @@ public final class NameResolverRegistry { @GuardedBy("this") private ImmutableMap effectiveProviders = ImmutableMap.of(); - public synchronized String getDefaultScheme() { - return defaultScheme; - } - - public NameResolverProvider getProviderForScheme(String scheme) { - if (scheme == null) { - return null; - } - return providers().get(scheme.toLowerCase(Locale.US)); - } /** * Register a provider. @@ -173,13 +163,19 @@ private final class NameResolverFactory extends NameResolver.Factory { @Override @Nullable public NameResolver newNameResolver(URI targetUri, NameResolver.Args args) { - NameResolverProvider provider = getProviderForScheme(targetUri.getScheme()); + String scheme = targetUri.getScheme(); + if (scheme == null) { + return null; + } + NameResolverProvider provider = providers().get(scheme.toLowerCase(Locale.US)); return provider == null ? null : provider.newNameResolver(targetUri, args); } @Override public String getDefaultScheme() { - return NameResolverRegistry.this.getDefaultScheme(); + synchronized (NameResolverRegistry.this) { + return defaultScheme; + } } } diff --git a/api/src/test/java/io/grpc/ManagedChannelRegistryTest.java b/api/src/test/java/io/grpc/ManagedChannelRegistryTest.java index 30de2477d77..4a6dfa49c04 100644 --- a/api/src/test/java/io/grpc/ManagedChannelRegistryTest.java +++ b/api/src/test/java/io/grpc/ManagedChannelRegistryTest.java @@ -173,13 +173,13 @@ class SocketAddress2 extends SocketAddress { nameResolverRegistry.register(new BaseNameResolverProvider(true, 5, "sc1") { @Override - public Collection> getProducedSocketAddressTypes() { + protected Collection> getProducedSocketAddressTypes() { return Collections.singleton(SocketAddress1.class); } }); nameResolverRegistry.register(new BaseNameResolverProvider(true, 6, "sc2") { @Override - public Collection> getProducedSocketAddressTypes() { + protected Collection> getProducedSocketAddressTypes() { fail("Should not be called"); throw new AssertionError(); } @@ -234,7 +234,7 @@ class SocketAddress2 extends SocketAddress { nameResolverRegistry.register(new BaseNameResolverProvider(true, 5, "sc1") { @Override - public Collection> getProducedSocketAddressTypes() { + protected Collection> getProducedSocketAddressTypes() { return ImmutableSet.of(SocketAddress1.class, SocketAddress2.class); } }); @@ -314,7 +314,7 @@ class SocketAddress1 extends SocketAddress { nameResolverRegistry.register(new BaseNameResolverProvider(true, 5, "sc1") { @Override - public Collection> getProducedSocketAddressTypes() { + protected Collection> getProducedSocketAddressTypes() { return Collections.singleton(SocketAddress1.class); } }); diff --git a/api/src/test/java/io/grpc/NameResolverRegistryTest.java b/api/src/test/java/io/grpc/NameResolverRegistryTest.java index 32067e976de..19ae09520dd 100644 --- a/api/src/test/java/io/grpc/NameResolverRegistryTest.java +++ b/api/src/test/java/io/grpc/NameResolverRegistryTest.java @@ -203,14 +203,12 @@ public void newNameResolver_noProvider() { public void baseProviders() { Map providers = NameResolverRegistry.getDefaultRegistry().providers(); - assertThat(providers).hasSize(2); + assertThat(providers).hasSize(1); // 2 name resolvers from grpclb and core, higher priority one is returned. assertThat(providers.get("dns").getClass().getName()) .isEqualTo("io.grpc.grpclb.SecretGrpclbNameResolverProvider$Provider"); assertThat(NameResolverRegistry.getDefaultRegistry().asFactory().getDefaultScheme()) .isEqualTo("dns"); - assertThat(providers.get("inprocess").getClass().getName()) - .isEqualTo("io.grpc.inprocess.InProcessNameResolverProvider"); } @Test diff --git a/benchmarks/src/jmh/java/io/grpc/benchmarks/TransportBenchmark.java b/benchmarks/src/jmh/java/io/grpc/benchmarks/TransportBenchmark.java index d0de1571a59..ea23fadeec8 100644 --- a/benchmarks/src/jmh/java/io/grpc/benchmarks/TransportBenchmark.java +++ b/benchmarks/src/jmh/java/io/grpc/benchmarks/TransportBenchmark.java @@ -110,7 +110,7 @@ public void setUp() throws Exception { .channelType(LocalServerChannel.class); channelBuilder = NettyChannelBuilder.forAddress(address) .eventLoopGroup(group) - .channelType(LocalChannel.class, LocalAddress.class) + .channelType(LocalChannel.class) .negotiationType(NegotiationType.PLAINTEXT); groupToShutdown = group; break; @@ -134,7 +134,7 @@ public void setUp() throws Exception { .asSubclass(Channel.class); channelBuilder = NettyChannelBuilder.forAddress(address) .eventLoopGroup(group) - .channelType(channelClass, InetSocketAddress.class) + .channelType(channelClass) .negotiationType(NegotiationType.PLAINTEXT); groupToShutdown = group; break; diff --git a/benchmarks/src/jmh/java/io/grpc/benchmarks/netty/AbstractBenchmark.java b/benchmarks/src/jmh/java/io/grpc/benchmarks/netty/AbstractBenchmark.java index 6d8a9ec8a8e..d68e66561a8 100644 --- a/benchmarks/src/jmh/java/io/grpc/benchmarks/netty/AbstractBenchmark.java +++ b/benchmarks/src/jmh/java/io/grpc/benchmarks/netty/AbstractBenchmark.java @@ -207,7 +207,7 @@ public void setup(ExecutorType clientExecutor, serverBuilder = NettyServerBuilder.forAddress(address, serverCreds); serverBuilder.channelType(LocalServerChannel.class); channelBuilder = NettyChannelBuilder.forAddress(address); - channelBuilder.channelType(LocalChannel.class, LocalAddress.class); + channelBuilder.channelType(LocalChannel.class); } else { ServerSocket sock = new ServerSocket(); // Pick a port using an ephemeral socket. @@ -216,8 +216,7 @@ public void setup(ExecutorType clientExecutor, sock.close(); serverBuilder = NettyServerBuilder.forAddress(address, serverCreds) .channelType(NioServerSocketChannel.class); - channelBuilder = NettyChannelBuilder.forAddress(address).channelType(NioSocketChannel.class, - InetSocketAddress.class); + channelBuilder = NettyChannelBuilder.forAddress(address).channelType(NioSocketChannel.class); } if (serverExecutor == ExecutorType.DIRECT) { diff --git a/benchmarks/src/main/java/io/grpc/benchmarks/Utils.java b/benchmarks/src/main/java/io/grpc/benchmarks/Utils.java index c4ba99e1639..8087afbf406 100644 --- a/benchmarks/src/main/java/io/grpc/benchmarks/Utils.java +++ b/benchmarks/src/main/java/io/grpc/benchmarks/Utils.java @@ -130,21 +130,21 @@ private static NettyChannelBuilder configureNetty( case NETTY_NIO: builder .eventLoopGroup(new NioEventLoopGroup(0, tf)) - .channelType(NioSocketChannel.class, InetSocketAddress.class); + .channelType(NioSocketChannel.class); break; case NETTY_EPOLL: // These classes only work on Linux. builder .eventLoopGroup(new EpollEventLoopGroup(0, tf)) - .channelType(EpollSocketChannel.class, InetSocketAddress.class); + .channelType(EpollSocketChannel.class); break; case NETTY_UNIX_DOMAIN_SOCKET: // These classes only work on Linux. builder .eventLoopGroup(new EpollEventLoopGroup(0, tf)) - .channelType(EpollDomainSocketChannel.class, DomainSocketAddress.class); + .channelType(EpollDomainSocketChannel.class); break; default: diff --git a/binder/src/main/java/io/grpc/binder/BinderChannelBuilder.java b/binder/src/main/java/io/grpc/binder/BinderChannelBuilder.java index 83eabf407ea..c096fc1942b 100644 --- a/binder/src/main/java/io/grpc/binder/BinderChannelBuilder.java +++ b/binder/src/main/java/io/grpc/binder/BinderChannelBuilder.java @@ -39,8 +39,6 @@ import io.grpc.internal.ObjectPool; import io.grpc.internal.SharedResourcePool; import java.net.SocketAddress; -import java.util.Collection; -import java.util.Collections; import java.util.concurrent.Executor; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -403,10 +401,5 @@ public void close() { executorService = scheduledExecutorPool.returnObject(executorService); offloadExecutor = offloadExecutorPool.returnObject(offloadExecutor); } - - @Override - public Collection> getSupportedSocketAddressTypes() { - return Collections.singleton(AndroidComponentAddress.class); - } } } diff --git a/core/src/main/java/io/grpc/internal/CallCredentialsApplyingTransportFactory.java b/core/src/main/java/io/grpc/internal/CallCredentialsApplyingTransportFactory.java index 42631851974..1537d1c664f 100644 --- a/core/src/main/java/io/grpc/internal/CallCredentialsApplyingTransportFactory.java +++ b/core/src/main/java/io/grpc/internal/CallCredentialsApplyingTransportFactory.java @@ -34,7 +34,6 @@ import io.grpc.Status; import io.grpc.internal.MetadataApplierImpl.MetadataApplierListener; import java.net.SocketAddress; -import java.util.Collection; import java.util.concurrent.Executor; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.atomic.AtomicInteger; @@ -75,11 +74,6 @@ public void close() { delegate.close(); } - @Override - public Collection> getSupportedSocketAddressTypes() { - return delegate.getSupportedSocketAddressTypes(); - } - private class CallCredentialsApplyingTransport extends ForwardingConnectionClientTransport { private final ConnectionClientTransport delegate; private final String authority; diff --git a/core/src/main/java/io/grpc/internal/ClientTransportFactory.java b/core/src/main/java/io/grpc/internal/ClientTransportFactory.java index d987f9d5068..4d2ee92a0aa 100644 --- a/core/src/main/java/io/grpc/internal/ClientTransportFactory.java +++ b/core/src/main/java/io/grpc/internal/ClientTransportFactory.java @@ -25,7 +25,6 @@ import io.grpc.HttpConnectProxiedSocketAddress; import java.io.Closeable; import java.net.SocketAddress; -import java.util.Collection; import java.util.concurrent.ScheduledExecutorService; import javax.annotation.CheckReturnValue; import javax.annotation.Nullable; @@ -74,11 +73,6 @@ ConnectionClientTransport newClientTransport( @Override void close(); - /** - * Returns the {@link SocketAddress} types this transport supports. - */ - Collection> getSupportedSocketAddressTypes(); - /** * Options passed to {@link #newClientTransport}. Although it is safe to save this object if * received, it is generally expected that the useful fields are copied and then the options diff --git a/core/src/main/java/io/grpc/internal/DnsNameResolverProvider.java b/core/src/main/java/io/grpc/internal/DnsNameResolverProvider.java index c977fbb0cca..414a0ae88fe 100644 --- a/core/src/main/java/io/grpc/internal/DnsNameResolverProvider.java +++ b/core/src/main/java/io/grpc/internal/DnsNameResolverProvider.java @@ -84,7 +84,7 @@ public int priority() { } @Override - public Collection> getProducedSocketAddressTypes() { + protected Collection> getProducedSocketAddressTypes() { return Collections.singleton(InetSocketAddress.class); } } diff --git a/core/src/main/java/io/grpc/internal/ManagedChannelImpl.java b/core/src/main/java/io/grpc/internal/ManagedChannelImpl.java index a6e5e80f38f..6d92b7851d8 100644 --- a/core/src/main/java/io/grpc/internal/ManagedChannelImpl.java +++ b/core/src/main/java/io/grpc/internal/ManagedChannelImpl.java @@ -73,7 +73,6 @@ import io.grpc.NameResolver; import io.grpc.NameResolver.ConfigOrError; import io.grpc.NameResolver.ResolutionResult; -import io.grpc.NameResolverProvider; import io.grpc.NameResolverRegistry; import io.grpc.ProxyDetector; import io.grpc.Status; @@ -89,7 +88,6 @@ import io.grpc.internal.RetriableStream.ChannelBufferMeter; import io.grpc.internal.RetriableStream.Throttle; import io.grpc.internal.RetryingNameResolver.ResolutionResultListener; -import java.net.SocketAddress; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; @@ -162,6 +160,7 @@ public Result selectConfig(PickSubchannelArgs args) { @Nullable private final String authorityOverride; private final NameResolverRegistry nameResolverRegistry; + private final NameResolver.Factory nameResolverFactory; private final NameResolver.Args nameResolverArgs; private final AutoConfiguredLoadBalancerFactory loadBalancerFactory; private final ClientTransportFactory originalTransportFactory; @@ -377,8 +376,7 @@ private void shutdownNameResolverAndLoadBalancer(boolean channelIsActive) { nameResolverStarted = false; if (channelIsActive) { nameResolver = getNameResolver( - target, authorityOverride, nameResolverRegistry, nameResolverArgs, - transportFactory.getSupportedSocketAddressTypes()); + target, authorityOverride, nameResolverFactory, nameResolverArgs); } else { nameResolver = null; } @@ -632,9 +630,9 @@ ClientStream newSubstream( .setOffloadExecutor(this.offloadExecutorHolder) .setOverrideAuthority(this.authorityOverride) .build(); + this.nameResolverFactory = builder.nameResolverFactory; this.nameResolver = getNameResolver( - target, authorityOverride, nameResolverRegistry, nameResolverArgs, - transportFactory.getSupportedSocketAddressTypes()); + target, authorityOverride, nameResolverFactory, nameResolverArgs); this.balancerRpcExecutorPool = checkNotNull(balancerRpcExecutorPool, "balancerRpcExecutorPool"); this.balancerRpcExecutorHolder = new ExecutorHolder(balancerRpcExecutorPool); this.delayedTransport = new DelayedClientTransport(this.executor, this.syncContext); @@ -706,70 +704,54 @@ public CallTracer create() { } private static NameResolver getNameResolver( - String target, NameResolverRegistry nameResolverRegistry, NameResolver.Args nameResolverArgs, - Collection> channelTransportSocketAddressTypes) { + String target, NameResolver.Factory nameResolverFactory, NameResolver.Args nameResolverArgs) { // Finding a NameResolver. Try using the target string as the URI. If that fails, try prepending // "dns:///". - NameResolverProvider provider = null; URI targetUri = null; StringBuilder uriSyntaxErrors = new StringBuilder(); try { targetUri = new URI(target); + // For "localhost:8080" this would likely cause newNameResolver to return null, because + // "localhost" is parsed as the scheme. Will fall into the next branch and try + // "dns:///localhost:8080". } catch (URISyntaxException e) { // Can happen with ip addresses like "[::1]:1234" or 127.0.0.1:1234. uriSyntaxErrors.append(e.getMessage()); } 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()); + NameResolver resolver = nameResolverFactory.newNameResolver(targetUri, nameResolverArgs); + if (resolver != null) { + return resolver; + } + // "foo.googleapis.com:8080" cause resolver to be null, because "foo.googleapis.com" is an + // unmapped scheme. Just fall through and will try "dns:///foo.googleapis.com:8080" } - if (provider == null && !URI_PATTERN.matcher(target).matches()) { + // If we reached here, the targetUri couldn't be used. + if (!URI_PATTERN.matcher(target).matches()) { // It doesn't look like a URI target. Maybe it's an authority string. Try with the default - // scheme from the registry. + // scheme from the factory. try { - targetUri = new URI(nameResolverRegistry.getDefaultScheme(), "", "/" + target, null); + targetUri = new URI(nameResolverFactory.getDefaultScheme(), "", "/" + target, null); } catch (URISyntaxException e) { // Should not be possible. throw new IllegalArgumentException(e); } - provider = nameResolverRegistry.getProviderForScheme(targetUri.getScheme()); - } - - if (provider == null) { - throw new IllegalArgumentException(String.format( - "Could not find a NameResolverProvider for %s%s", - target, uriSyntaxErrors.length() > 0 ? " (" + uriSyntaxErrors + ")" : "")); - } - - if (channelTransportSocketAddressTypes != null) { - Collection> nameResolverSocketAddressTypes - = provider.getProducedSocketAddressTypes(); - if (!channelTransportSocketAddressTypes.containsAll(nameResolverSocketAddressTypes)) { - throw new IllegalArgumentException(String.format( - "Address types of NameResolver '%s' for '%s' not supported by transport", - targetUri.getScheme(), target)); + NameResolver resolver = nameResolverFactory.newNameResolver(targetUri, nameResolverArgs); + if (resolver != null) { + return resolver; } } - - NameResolver resolver = provider.newNameResolver(targetUri, nameResolverArgs); - if (resolver != null) { - return resolver; - } - throw new IllegalArgumentException(String.format( - "cannot create a NameResolver for %s%s", + "cannot find a NameResolver for %s%s", target, uriSyntaxErrors.length() > 0 ? " (" + uriSyntaxErrors + ")" : "")); } @VisibleForTesting static NameResolver getNameResolver( String target, @Nullable final String overrideAuthority, - NameResolverRegistry nameResolverRegistry, NameResolver.Args nameResolverArgs, - Collection> channelTransportSocketAddressTypes) { - NameResolver resolver = getNameResolver(target, nameResolverRegistry, nameResolverArgs, - channelTransportSocketAddressTypes); + NameResolver.Factory nameResolverFactory, NameResolver.Args nameResolverArgs) { + NameResolver resolver = getNameResolver(target, nameResolverFactory, nameResolverArgs); // We wrap the name resolver in a RetryingNameResolver to give it the ability to retry failures. // TODO: After a transition period, all NameResolver implementations that need retry should use @@ -1643,8 +1625,7 @@ public ClientTransportFactory buildClientTransportFactory() { channelCreds, callCredentials, transportFactoryBuilder, - new FixedPortProvider(nameResolverArgs.getDefaultPort())) - .nameResolverRegistry(nameResolverRegistry); + new FixedPortProvider(nameResolverArgs.getDefaultPort())); } @Override @@ -1656,7 +1637,8 @@ protected ManagedChannelBuilder delegate() { checkState(!terminated, "Channel is terminated"); @SuppressWarnings("deprecation") - ResolvingOobChannelBuilder builder = new ResolvingOobChannelBuilder(); + ResolvingOobChannelBuilder builder = new ResolvingOobChannelBuilder() + .nameResolverFactory(nameResolverFactory); return builder // TODO(zdapeng): executors should not outlive the parent channel. diff --git a/core/src/main/java/io/grpc/internal/ManagedChannelImplBuilder.java b/core/src/main/java/io/grpc/internal/ManagedChannelImplBuilder.java index bf96af6ebe8..7ef2f286a75 100644 --- a/core/src/main/java/io/grpc/internal/ManagedChannelImplBuilder.java +++ b/core/src/main/java/io/grpc/internal/ManagedChannelImplBuilder.java @@ -35,7 +35,6 @@ import io.grpc.ManagedChannel; import io.grpc.ManagedChannelBuilder; import io.grpc.NameResolver; -import io.grpc.NameResolverProvider; import io.grpc.NameResolverRegistry; import io.grpc.ProxyDetector; import java.lang.reflect.InvocationTargetException; @@ -45,7 +44,6 @@ import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; @@ -135,7 +133,10 @@ public static ManagedChannelBuilder forTarget(String target) { ObjectPool offloadExecutorPool = DEFAULT_EXECUTOR_POOL; private final List interceptors = new ArrayList<>(); - NameResolverRegistry nameResolverRegistry = NameResolverRegistry.getDefaultRegistry(); + final NameResolverRegistry nameResolverRegistry = NameResolverRegistry.getDefaultRegistry(); + + // Access via getter, which may perform authority override as needed + NameResolver.Factory nameResolverFactory = nameResolverRegistry.asFactory(); final String target; @Nullable @@ -283,7 +284,7 @@ public ManagedChannelImplBuilder( /** * Returns a target string for the SocketAddress. It is only used as a placeholder, because - * DirectAddressNameResolverProvider will not actually try to use it. However, it must be a valid + * DirectAddressNameResolverFactory will not actually try to use it. However, it must be a valid * URI. */ @VisibleForTesting @@ -326,10 +327,7 @@ public ManagedChannelImplBuilder(SocketAddress directServerAddress, String autho this.clientTransportFactoryBuilder = Preconditions .checkNotNull(clientTransportFactoryBuilder, "clientTransportFactoryBuilder"); this.directServerAddress = directServerAddress; - NameResolverRegistry reg = new NameResolverRegistry(); - reg.register(new DirectAddressNameResolverProvider(directServerAddress, - authority)); - this.nameResolverRegistry = reg; + this.nameResolverFactory = new DirectAddressNameResolverFactory(directServerAddress, authority); if (channelBuilderDefaultPortProvider != null) { this.channelBuilderDefaultPortProvider = channelBuilderDefaultPortProvider; @@ -381,20 +379,13 @@ public ManagedChannelImplBuilder nameResolverFactory(NameResolver.Factory resolv "directServerAddress is set (%s), which forbids the use of NameResolverFactory", directServerAddress); if (resolverFactory != null) { - NameResolverRegistry reg = new NameResolverRegistry(); - reg.register(new NameResolverFactoryToProviderFacade(resolverFactory)); - this.nameResolverRegistry = reg; + this.nameResolverFactory = resolverFactory; } else { - this.nameResolverRegistry = NameResolverRegistry.getDefaultRegistry(); + this.nameResolverFactory = nameResolverRegistry.asFactory(); } return this; } - ManagedChannelImplBuilder nameResolverRegistry(NameResolverRegistry resolverRegistry) { - this.nameResolverRegistry = resolverRegistry; - return this; - } - @Override public ManagedChannelImplBuilder defaultLoadBalancingPolicy(String policy) { Preconditions.checkState(directServerAddress == null, @@ -737,16 +728,13 @@ int getDefaultPort() { return channelBuilderDefaultPortProvider.getDefaultPort(); } - private static class DirectAddressNameResolverProvider extends NameResolverProvider { + private static class DirectAddressNameResolverFactory extends NameResolver.Factory { final SocketAddress address; final String authority; - final Collection> producedSocketAddressTypes; - DirectAddressNameResolverProvider(SocketAddress address, String authority) { + DirectAddressNameResolverFactory(SocketAddress address, String authority) { this.address = address; this.authority = authority; - this.producedSocketAddressTypes - = Collections.singleton(address.getClass()); } @Override @@ -775,21 +763,6 @@ public void shutdown() {} public String getDefaultScheme() { return DIRECT_ADDRESS_SCHEME; } - - @Override - protected boolean isAvailable() { - return true; - } - - @Override - protected int priority() { - return 5; - } - - @Override - public Collection> getProducedSocketAddressTypes() { - return producedSocketAddressTypes; - } } /** diff --git a/core/src/main/java/io/grpc/internal/NameResolverFactoryToProviderFacade.java b/core/src/main/java/io/grpc/internal/NameResolverFactoryToProviderFacade.java deleted file mode 100644 index 31c20f6e499..00000000000 --- a/core/src/main/java/io/grpc/internal/NameResolverFactoryToProviderFacade.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2023 The gRPC Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.grpc.internal; - -import io.grpc.NameResolver; -import io.grpc.NameResolver.Args; -import io.grpc.NameResolverProvider; -import java.net.URI; - -public class NameResolverFactoryToProviderFacade extends NameResolverProvider { - - private NameResolver.Factory factory; - - NameResolverFactoryToProviderFacade(NameResolver.Factory factory) { - this.factory = factory; - } - - @Override - public NameResolver newNameResolver(URI targetUri, Args args) { - return factory.newNameResolver(targetUri, args); - } - - @Override - public String getDefaultScheme() { - return factory.getDefaultScheme(); - } - - @Override - protected boolean isAvailable() { - return true; - } - - @Override - protected int priority() { - return 5; - } -} diff --git a/core/src/test/java/io/grpc/internal/ManagedChannelImplBuilderTest.java b/core/src/test/java/io/grpc/internal/ManagedChannelImplBuilderTest.java index 67b80bf74e3..dae8b9b3752 100644 --- a/core/src/test/java/io/grpc/internal/ManagedChannelImplBuilderTest.java +++ b/core/src/test/java/io/grpc/internal/ManagedChannelImplBuilderTest.java @@ -24,7 +24,6 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -40,9 +39,7 @@ import io.grpc.ManagedChannel; import io.grpc.MethodDescriptor; import io.grpc.NameResolver; -import io.grpc.NameResolverRegistry; import io.grpc.StaticTestingClassLoader; -import io.grpc.inprocess.InProcessSocketAddress; import io.grpc.internal.ManagedChannelImplBuilder.ChannelBuilderDefaultPortProvider; import io.grpc.internal.ManagedChannelImplBuilder.ClientTransportFactoryBuilder; import io.grpc.internal.ManagedChannelImplBuilder.FixedPortProvider; @@ -199,30 +196,25 @@ public void offloadExecutor_null() { } @Test - public void nameResolverRegistry_default() { - assertNotNull(builder.nameResolverRegistry); + public void nameResolverFactory_default() { + assertNotNull(builder.nameResolverFactory); } @Test @SuppressWarnings("deprecation") public void nameResolverFactory_normal() { NameResolver.Factory nameResolverFactory = mock(NameResolver.Factory.class); - doReturn("testscheme").when(nameResolverFactory).getDefaultScheme(); assertEquals(builder, builder.nameResolverFactory(nameResolverFactory)); - assertNotNull(builder.nameResolverRegistry); - assertEquals("testscheme", builder.nameResolverRegistry.asFactory().getDefaultScheme()); + assertEquals(nameResolverFactory, builder.nameResolverFactory); } @Test @SuppressWarnings("deprecation") public void nameResolverFactory_null() { - NameResolverRegistry defaultValue = builder.nameResolverRegistry; - NameResolver.Factory nameResolverFactory = mock(NameResolver.Factory.class); - doReturn("testscheme").when(nameResolverFactory).getDefaultScheme(); - builder.nameResolverFactory(nameResolverFactory); - assertNotEquals(defaultValue, builder.nameResolverRegistry); - builder.nameResolverFactory(null); - assertEquals(defaultValue, builder.nameResolverRegistry); + NameResolver.Factory defaultValue = builder.nameResolverFactory; + builder.nameResolverFactory(mock(NameResolver.Factory.class)); + assertEquals(builder, builder.nameResolverFactory(null)); + assertEquals(defaultValue, builder.nameResolverFactory); } @Test(expected = IllegalStateException.class) @@ -335,8 +327,6 @@ public void authorityIsReadable_default() { .thenReturn(clock.getScheduledExecutorService()); when(mockClientTransportFactoryBuilder.buildClientTransportFactory()) .thenReturn(mockClientTransportFactory); - when(mockClientTransportFactory.getSupportedSocketAddressTypes()) - .thenReturn(Collections.singleton(InetSocketAddress.class)); builder = new ManagedChannelImplBuilder(DUMMY_AUTHORITY_VALID, mockClientTransportFactoryBuilder, new FixedPortProvider(DUMMY_PORT)); @@ -351,8 +341,6 @@ public void authorityIsReadable_overrideAuthority() { .thenReturn(clock.getScheduledExecutorService()); when(mockClientTransportFactoryBuilder.buildClientTransportFactory()) .thenReturn(mockClientTransportFactory); - when(mockClientTransportFactory.getSupportedSocketAddressTypes()) - .thenReturn(Collections.singleton(InetSocketAddress.class)); builder = new ManagedChannelImplBuilder(DUMMY_TARGET, mockClientTransportFactoryBuilder, new FixedPortProvider(DUMMY_PORT)) @@ -361,41 +349,6 @@ mockClientTransportFactoryBuilder, new FixedPortProvider(DUMMY_PORT)) assertEquals(overrideAuthority, channel.authority()); } - @Test - public void transportDoesNotSupportAddressTypes() { - when(mockClientTransportFactory.getScheduledExecutorService()) - .thenReturn(clock.getScheduledExecutorService()); - when(mockClientTransportFactoryBuilder.buildClientTransportFactory()) - .thenReturn(mockClientTransportFactory); - when(mockClientTransportFactory.getSupportedSocketAddressTypes()) - .thenReturn(Collections.singleton(InProcessSocketAddress.class)); - - builder = new ManagedChannelImplBuilder(DUMMY_AUTHORITY_VALID, - mockClientTransportFactoryBuilder, new FixedPortProvider(DUMMY_PORT)); - try { - ManagedChannel unused = grpcCleanupRule.register(builder.build()); - fail("Should fail"); - } catch (IllegalArgumentException e) { - assertThat(e).hasMessageThat().isEqualTo( - "Address types of NameResolver 'dns' for 'valid:1234' not supported by transport"); - } - } - - @Test - public void transportAddressTypeCompatibilityCheckSkipped() { - when(mockClientTransportFactory.getScheduledExecutorService()) - .thenReturn(clock.getScheduledExecutorService()); - when(mockClientTransportFactoryBuilder.buildClientTransportFactory()) - .thenReturn(mockClientTransportFactory); - when(mockClientTransportFactory.getSupportedSocketAddressTypes()) - .thenReturn(null); - - builder = new ManagedChannelImplBuilder(DUMMY_AUTHORITY_VALID, - mockClientTransportFactoryBuilder, new FixedPortProvider(DUMMY_PORT)); - // should not fail - ManagedChannel unused = grpcCleanupRule.register(builder.build()); - } - @Test public void overrideAuthority_default() { assertNull(builder.authorityOverride); diff --git a/core/src/test/java/io/grpc/internal/ManagedChannelImplGetNameResolverTest.java b/core/src/test/java/io/grpc/internal/ManagedChannelImplGetNameResolverTest.java index 452e071912c..b63d53a6f83 100644 --- a/core/src/test/java/io/grpc/internal/ManagedChannelImplGetNameResolverTest.java +++ b/core/src/test/java/io/grpc/internal/ManagedChannelImplGetNameResolverTest.java @@ -24,22 +24,17 @@ import io.grpc.ChannelLogger; import io.grpc.NameResolver; -import io.grpc.NameResolver.Args; import io.grpc.NameResolver.ServiceConfigParser; -import io.grpc.NameResolverProvider; -import io.grpc.NameResolverRegistry; import io.grpc.ProxyDetector; import io.grpc.SynchronizationContext; -import io.grpc.inprocess.InProcessSocketAddress; import java.lang.Thread.UncaughtExceptionHandler; -import java.net.InetSocketAddress; import java.net.URI; -import java.util.Collections; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; -/** Unit tests for ManagedChannelImpl#getNameResolver(). */ +/** Unit tests for {@link ManagedChannelImpl#getNameResolver( + * String, String,NameResolver.Factory, NameResolver.Args)}. */ @RunWith(JUnit4.class) public class ManagedChannelImplGetNameResolverTest { private static final NameResolver.Args NAMERESOLVER_ARGS = NameResolver.Args.newBuilder() @@ -73,10 +68,9 @@ public void validAuthorityTarget_overrideAuthority() throws Exception { String target = "foo.googleapis.com:8080"; String overrideAuthority = "override.authority"; URI expectedUri = new URI("defaultscheme", "", "/foo.googleapis.com:8080", null); - NameResolverRegistry nameResolverRegistry = getTestRegistry(expectedUri.getScheme()); + NameResolver.Factory nameResolverFactory = new FakeNameResolverFactory(expectedUri.getScheme()); NameResolver nameResolver = ManagedChannelImpl.getNameResolver( - target, overrideAuthority, nameResolverRegistry, NAMERESOLVER_ARGS, - Collections.singleton(InetSocketAddress.class)); + target, overrideAuthority, nameResolverFactory, NAMERESOLVER_ARGS); assertThat(nameResolver.getServiceAuthority()).isEqualTo(overrideAuthority); } @@ -122,21 +116,10 @@ public void validTargetStartingWithSlash() throws Exception { } @Test - public void validTargetNoResolver() { - NameResolverRegistry nameResolverRegistry = new NameResolverRegistry(); - NameResolverProvider nameResolverProvider = new NameResolverProvider() { + public void validTargetNoResovler() { + NameResolver.Factory nameResolverFactory = new NameResolver.Factory() { @Override - protected boolean isAvailable() { - return true; - } - - @Override - protected int priority() { - return 5; - } - - @Override - public NameResolver newNameResolver(URI targetUri, Args args) { + public NameResolver newNameResolver(URI targetUri, NameResolver.Args args) { return null; } @@ -145,81 +128,41 @@ public String getDefaultScheme() { return "defaultscheme"; } }; - nameResolverRegistry.register(nameResolverProvider); - try { - ManagedChannelImpl.getNameResolver( - "foo.googleapis.com:8080", null, nameResolverRegistry, NAMERESOLVER_ARGS, - Collections.singleton(InetSocketAddress.class)); - fail("Should fail"); - } catch (IllegalArgumentException e) { - // expected - } - } - - @Test - public void validTargetNoProvider() { - NameResolverRegistry nameResolverRegistry = new NameResolverRegistry(); try { ManagedChannelImpl.getNameResolver( - "foo.googleapis.com:8080", null, nameResolverRegistry, NAMERESOLVER_ARGS, - Collections.singleton(InetSocketAddress.class)); + "foo.googleapis.com:8080", null, nameResolverFactory, NAMERESOLVER_ARGS); fail("Should fail"); } catch (IllegalArgumentException e) { // expected } } - @Test - public void validTargetProviderAddrTypesNotSupported() { - NameResolverRegistry nameResolverRegistry = getTestRegistry("testscheme"); - try { - ManagedChannelImpl.getNameResolver( - "testscheme:///foo.googleapis.com:8080", null, nameResolverRegistry, NAMERESOLVER_ARGS, - Collections.singleton(InProcessSocketAddress.class)); - fail("Should fail"); - } catch (IllegalArgumentException e) { - assertThat(e).hasMessageThat().isEqualTo( - "Address types of NameResolver 'testscheme' for " - + "'testscheme:///foo.googleapis.com:8080' not supported by transport"); - } - } - - private void testValidTarget(String target, String expectedUriString, URI expectedUri) { - NameResolverRegistry nameResolverRegistry = getTestRegistry(expectedUri.getScheme()); + NameResolver.Factory nameResolverFactory = new FakeNameResolverFactory(expectedUri.getScheme()); FakeNameResolver nameResolver = (FakeNameResolver) ((RetryingNameResolver) ManagedChannelImpl.getNameResolver( - target, null, nameResolverRegistry, NAMERESOLVER_ARGS, - Collections.singleton(InetSocketAddress.class))).getRetriedNameResolver(); + target, null, nameResolverFactory, NAMERESOLVER_ARGS)).getRetriedNameResolver(); assertNotNull(nameResolver); assertEquals(expectedUri, nameResolver.uri); assertEquals(expectedUriString, nameResolver.uri.toString()); } private void testInvalidTarget(String target) { - NameResolverRegistry nameResolverRegistry = getTestRegistry("dns"); + NameResolver.Factory nameResolverFactory = new FakeNameResolverFactory("dns"); try { FakeNameResolver nameResolver = (FakeNameResolver) ManagedChannelImpl.getNameResolver( - target, null, nameResolverRegistry, NAMERESOLVER_ARGS, - Collections.singleton(InetSocketAddress.class)); + target, null, nameResolverFactory, NAMERESOLVER_ARGS); fail("Should have failed, but got resolver with " + nameResolver.uri); } catch (IllegalArgumentException e) { // expected } } - private static NameResolverRegistry getTestRegistry(String expectedScheme) { - NameResolverRegistry nameResolverRegistry = new NameResolverRegistry(); - FakeNameResolverProvider nameResolverProvider = new FakeNameResolverProvider(expectedScheme); - nameResolverRegistry.register(nameResolverProvider); - return nameResolverRegistry; - } - - private static class FakeNameResolverProvider extends NameResolverProvider { + private static class FakeNameResolverFactory extends NameResolver.Factory { final String expectedScheme; - FakeNameResolverProvider(String expectedScheme) { + FakeNameResolverFactory(String expectedScheme) { this.expectedScheme = expectedScheme; } @@ -235,16 +178,6 @@ public NameResolver newNameResolver(URI targetUri, NameResolver.Args args) { public String getDefaultScheme() { return expectedScheme; } - - @Override - protected boolean isAvailable() { - return true; - } - - @Override - protected int priority() { - return 5; - } } private static class FakeNameResolver extends NameResolver { diff --git a/core/src/test/java/io/grpc/internal/ManagedChannelImplIdlenessTest.java b/core/src/test/java/io/grpc/internal/ManagedChannelImplIdlenessTest.java index e50eeaf7686..faecfdfe577 100644 --- a/core/src/test/java/io/grpc/internal/ManagedChannelImplIdlenessTest.java +++ b/core/src/test/java/io/grpc/internal/ManagedChannelImplIdlenessTest.java @@ -66,7 +66,6 @@ import io.grpc.internal.FakeClock.ScheduledTask; import io.grpc.internal.ManagedChannelImplBuilder.UnsupportedClientTransportFactoryBuilder; import io.grpc.internal.TestUtils.MockClientTransportInfo; -import java.net.InetSocketAddress; import java.net.SocketAddress; import java.net.URI; import java.util.ArrayList; @@ -162,14 +161,10 @@ public void setUp() { when(mockNameResolverFactory .newNameResolver(any(URI.class), any(NameResolver.Args.class))) .thenReturn(mockNameResolver); - when(mockNameResolverFactory.getDefaultScheme()) - .thenReturn("mockscheme"); when(mockTransportFactory.getScheduledExecutorService()) .thenReturn(timer.getScheduledExecutorService()); - when(mockTransportFactory.getSupportedSocketAddressTypes()) - .thenReturn(Collections.singleton(InetSocketAddress.class)); - ManagedChannelImplBuilder builder = new ManagedChannelImplBuilder("mockscheme:///target", + ManagedChannelImplBuilder builder = new ManagedChannelImplBuilder("fake://target", new UnsupportedClientTransportFactoryBuilder(), null); builder diff --git a/core/src/test/java/io/grpc/internal/ManagedChannelImplTest.java b/core/src/test/java/io/grpc/internal/ManagedChannelImplTest.java index dd7c7904a3d..db794bf9eca 100644 --- a/core/src/test/java/io/grpc/internal/ManagedChannelImplTest.java +++ b/core/src/test/java/io/grpc/internal/ManagedChannelImplTest.java @@ -122,7 +122,6 @@ import io.grpc.testing.TestMethodDescriptors; import io.grpc.util.ForwardingSubchannel; import java.io.IOException; -import java.net.InetSocketAddress; import java.net.SocketAddress; import java.net.URI; import java.util.ArrayList; @@ -288,8 +287,6 @@ private void createChannel(boolean nameResolutionExpectedToFail, ClientInterceptor... interceptors) { checkState(channel == null); - when(mockTransportFactory.getSupportedSocketAddressTypes()).thenReturn(Collections.singleton( - InetSocketAddress.class)); channel = new ManagedChannelImpl( channelBuilder, mockTransportFactory, new FakeBackoffPolicyProvider(), balancerRpcExecutorPool, timer.getStopwatchSupplier(), Arrays.asList(interceptors), @@ -476,8 +473,6 @@ public void startCallBeforeNameResolution() throws Exception { new FakeNameResolverFactory.Builder(expectedUri) .setServers(ImmutableList.of(addressGroup)).build(); channelBuilder.nameResolverFactory(nameResolverFactory); - when(mockTransportFactory.getSupportedSocketAddressTypes()).thenReturn(Collections.singleton( - InetSocketAddress.class)); channel = new ManagedChannelImpl( channelBuilder, mockTransportFactory, new FakeBackoffPolicyProvider(), balancerRpcExecutorPool, timer.getStopwatchSupplier(), @@ -540,8 +535,6 @@ public void newCallWithConfigSelector() { new FakeNameResolverFactory.Builder(expectedUri) .setServers(ImmutableList.of(addressGroup)).build(); channelBuilder.nameResolverFactory(nameResolverFactory); - when(mockTransportFactory.getSupportedSocketAddressTypes()).thenReturn(Collections.singleton( - InetSocketAddress.class)); channel = new ManagedChannelImpl( channelBuilder, mockTransportFactory, new FakeBackoffPolicyProvider(), balancerRpcExecutorPool, timer.getStopwatchSupplier(), @@ -1725,7 +1718,7 @@ public void oobChannelHasNoChannelCallCredentials() { // Verify that resolving oob channel does not oob = helper.createResolvingOobChannelBuilder("oobauthority") .nameResolverFactory( - new FakeNameResolverFactory.Builder(URI.create("fake:///oobauthority")).build()) + new FakeNameResolverFactory.Builder(URI.create("oobauthority")).build()) .defaultLoadBalancingPolicy(MOCK_POLICY_NAME) .idleTimeout(ManagedChannelImplBuilder.IDLE_MODE_MAX_TIMEOUT_DAYS, TimeUnit.DAYS) .disableRetry() // irrelevant to what we test, disable retry to make verification easy @@ -2049,11 +2042,11 @@ public void lbHelper_getNameResolverArgs() { } @Test - public void lbHelper_getNonDefaultNameResolverRegistry() { + public void lbHelper_getNameResolverRegistry() { createChannel(); assertThat(helper.getNameResolverRegistry()) - .isNotSameInstanceAs(NameResolverRegistry.getDefaultRegistry()); + .isSameInstanceAs(NameResolverRegistry.getDefaultRegistry()); } @Test @@ -2618,7 +2611,7 @@ public void panic_atStart() { } @Override public String getDefaultScheme() { - return "fake"; + return "fakescheme"; } }); createChannel(); @@ -3752,8 +3745,6 @@ public ClientTransportFactory buildClientTransportFactory() { } }, null); - when(mockTransportFactory.getSupportedSocketAddressTypes()).thenReturn(Collections.singleton( - InetSocketAddress.class)); customBuilder.executorPool = executorPool; customBuilder.channelz = channelz; ManagedChannel mychannel = customBuilder.nameResolverFactory(factory).build(); @@ -3834,7 +3825,7 @@ public NameResolver newNameResolver(URI targetUri, NameResolver.Args args) { @Override public String getDefaultScheme() { - return "fake"; + return "fakescheme"; } }; channelBuilder.nameResolverFactory(factory).proxyDetector(neverProxy); diff --git a/core/src/test/java/io/grpc/internal/ServiceConfigErrorHandlingTest.java b/core/src/test/java/io/grpc/internal/ServiceConfigErrorHandlingTest.java index 0d050a09a9a..4558c63928f 100644 --- a/core/src/test/java/io/grpc/internal/ServiceConfigErrorHandlingTest.java +++ b/core/src/test/java/io/grpc/internal/ServiceConfigErrorHandlingTest.java @@ -48,7 +48,6 @@ import io.grpc.Status; import io.grpc.internal.ManagedChannelImplBuilder.FixedPortProvider; import io.grpc.internal.ManagedChannelImplBuilder.UnsupportedClientTransportFactoryBuilder; -import java.net.InetSocketAddress; import java.net.SocketAddress; import java.net.URI; import java.util.ArrayList; @@ -159,8 +158,6 @@ public ConfigOrError parseLoadBalancingPolicyConfig( private void createChannel(ClientInterceptor... interceptors) { checkState(channel == null); - when(mockTransportFactory.getSupportedSocketAddressTypes()).thenReturn(Collections.singleton( - InetSocketAddress.class)); channel = new ManagedChannelImpl( channelBuilder, diff --git a/cronet/src/main/java/io/grpc/cronet/CronetChannelBuilder.java b/cronet/src/main/java/io/grpc/cronet/CronetChannelBuilder.java index 93413aa22a3..066992018ed 100644 --- a/cronet/src/main/java/io/grpc/cronet/CronetChannelBuilder.java +++ b/cronet/src/main/java/io/grpc/cronet/CronetChannelBuilder.java @@ -42,8 +42,6 @@ import java.lang.reflect.Method; import java.net.InetSocketAddress; import java.net.SocketAddress; -import java.util.Collection; -import java.util.Collections; import java.util.concurrent.Executor; import java.util.concurrent.ScheduledExecutorService; import javax.annotation.Nullable; @@ -285,11 +283,6 @@ public void close() { SharedResourceHolder.release(GrpcUtil.TIMER_SERVICE, timeoutService); } } - - @Override - public Collection> getSupportedSocketAddressTypes() { - return Collections.singleton(InetSocketAddress.class); - } } /** diff --git a/googleapis/src/main/java/io/grpc/googleapis/GoogleCloudToProdNameResolverProvider.java b/googleapis/src/main/java/io/grpc/googleapis/GoogleCloudToProdNameResolverProvider.java index 8ad292a3d98..ce833d5c4e0 100644 --- a/googleapis/src/main/java/io/grpc/googleapis/GoogleCloudToProdNameResolverProvider.java +++ b/googleapis/src/main/java/io/grpc/googleapis/GoogleCloudToProdNameResolverProvider.java @@ -74,7 +74,7 @@ protected int priority() { } @Override - public Collection> getProducedSocketAddressTypes() { + protected Collection> getProducedSocketAddressTypes() { return Collections.singleton(InetSocketAddress.class); } diff --git a/grpclb/src/main/java/io/grpc/grpclb/SecretGrpclbNameResolverProvider.java b/grpclb/src/main/java/io/grpc/grpclb/SecretGrpclbNameResolverProvider.java index 8952ea1d8fb..3970c281e1b 100644 --- a/grpclb/src/main/java/io/grpc/grpclb/SecretGrpclbNameResolverProvider.java +++ b/grpclb/src/main/java/io/grpc/grpclb/SecretGrpclbNameResolverProvider.java @@ -94,7 +94,7 @@ public int priority() { } @Override - public Collection> getProducedSocketAddressTypes() { + protected Collection> getProducedSocketAddressTypes() { return Collections.singleton(InetSocketAddress.class); } } diff --git a/inprocess/src/main/java/io/grpc/inprocess/InProcessChannelBuilder.java b/inprocess/src/main/java/io/grpc/inprocess/InProcessChannelBuilder.java index ccc176b61cf..aa53dbc8719 100644 --- a/inprocess/src/main/java/io/grpc/inprocess/InProcessChannelBuilder.java +++ b/inprocess/src/main/java/io/grpc/inprocess/InProcessChannelBuilder.java @@ -33,8 +33,6 @@ import io.grpc.internal.ManagedChannelImplBuilder.ClientTransportFactoryBuilder; import io.grpc.internal.SharedResourceHolder; import java.net.SocketAddress; -import java.util.Collection; -import java.util.Collections; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import javax.annotation.Nullable; @@ -286,10 +284,5 @@ public void close() { SharedResourceHolder.release(GrpcUtil.TIMER_SERVICE, timerService); } } - - @Override - public Collection> getSupportedSocketAddressTypes() { - return Collections.singleton(InProcessSocketAddress.class); - } } } diff --git a/inprocess/src/main/java/io/grpc/inprocess/InProcessNameResolver.java b/inprocess/src/main/java/io/grpc/inprocess/InProcessNameResolver.java deleted file mode 100644 index f2e50eade47..00000000000 --- a/inprocess/src/main/java/io/grpc/inprocess/InProcessNameResolver.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright 2023 The gRPC Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.grpc.inprocess; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -import com.google.common.base.Preconditions; -import io.grpc.EquivalentAddressGroup; -import io.grpc.NameResolver; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -final class InProcessNameResolver extends NameResolver { - private Listener2 listener; - private final String authority; - - InProcessNameResolver(String authority, String targetPath) { - checkArgument(authority == null, "non-null authority not supported"); - this.authority = targetPath; - } - - @Override - public String getServiceAuthority() { - return this.authority; - } - - @Override - public void start(Listener2 listener) { - Preconditions.checkState(this.listener == null, "already started"); - this.listener = checkNotNull(listener, "listener"); - resolve(); - } - - @Override - public void refresh() { - resolve(); - } - - private void resolve() { - ResolutionResult.Builder resolutionResultBuilder = ResolutionResult.newBuilder(); - List servers = new ArrayList<>(1); - servers.add(new EquivalentAddressGroup(new InProcessSocketAddress(authority))); - resolutionResultBuilder.setAddresses(Collections.unmodifiableList(servers)); - listener.onResult(resolutionResultBuilder.build()); - } - - @Override - public void shutdown() {} -} diff --git a/inprocess/src/main/java/io/grpc/inprocess/InProcessNameResolverProvider.java b/inprocess/src/main/java/io/grpc/inprocess/InProcessNameResolverProvider.java deleted file mode 100644 index 98a37fc4099..00000000000 --- a/inprocess/src/main/java/io/grpc/inprocess/InProcessNameResolverProvider.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2023 The gRPC Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.grpc.inprocess; - -import com.google.common.base.Preconditions; -import io.grpc.Internal; -import io.grpc.NameResolver; -import io.grpc.NameResolverProvider; -import java.net.SocketAddress; -import java.net.URI; -import java.util.Collection; -import java.util.Collections; - -@Internal -public final class InProcessNameResolverProvider extends NameResolverProvider { - - private static final String SCHEME = "inprocess"; - - @Override - public InProcessNameResolver newNameResolver(URI targetUri, NameResolver.Args args) { - if (SCHEME.equals(targetUri.getScheme())) { - return new InProcessNameResolver(targetUri.getAuthority(), getTargetPathFromUri(targetUri)); - } else { - return null; - } - } - - static String getTargetPathFromUri(URI targetUri) { - Preconditions.checkArgument(SCHEME.equals(targetUri.getScheme()), "scheme must be " + SCHEME); - String targetPath = targetUri.getPath(); - if (targetPath == null) { - targetPath = Preconditions.checkNotNull(targetUri.getSchemeSpecificPart(), "targetPath"); - } - return targetPath; - } - - @Override - public String getDefaultScheme() { - return SCHEME; - } - - @Override - protected boolean isAvailable() { - return true; - } - - @Override - protected int priority() { - return 3; - } - - @Override - public Collection> getProducedSocketAddressTypes() { - return Collections.singleton(InProcessSocketAddress.class); - } -} diff --git a/inprocess/src/main/resources/META-INF/services/io.grpc.NameResolverProvider b/inprocess/src/main/resources/META-INF/services/io.grpc.NameResolverProvider deleted file mode 100644 index a054250839b..00000000000 --- a/inprocess/src/main/resources/META-INF/services/io.grpc.NameResolverProvider +++ /dev/null @@ -1 +0,0 @@ -io.grpc.inprocess.InProcessNameResolverProvider diff --git a/inprocess/src/test/java/io/grpc/inprocess/InProcessNameResolverProviderTest.java b/inprocess/src/test/java/io/grpc/inprocess/InProcessNameResolverProviderTest.java deleted file mode 100644 index 0a2e85dcf2e..00000000000 --- a/inprocess/src/test/java/io/grpc/inprocess/InProcessNameResolverProviderTest.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright 2023 The gRPC Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.grpc.inprocess; - -import static com.google.common.truth.Truth.assertThat; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.fail; -import static org.mockito.Mockito.verify; - -import io.grpc.EquivalentAddressGroup; -import io.grpc.NameResolver; -import java.net.SocketAddress; -import java.net.URI; -import java.util.List; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.JUnit4; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.Mock; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; - -/** Unit tests for {@link InProcessNameResolverProvider}. */ -@RunWith(JUnit4.class) -public class InProcessNameResolverProviderTest { - - @Rule - public final MockitoRule mocks = MockitoJUnit.rule(); - - @Mock - private NameResolver.Listener2 mockListener; - - @Captor - private ArgumentCaptor resultCaptor; - - InProcessNameResolverProvider inProcessNameResolverProvider = new InProcessNameResolverProvider(); - - - @Test - public void testRelativePath() { - InProcessNameResolver inProcessNameResolver = - inProcessNameResolverProvider.newNameResolver(URI.create("inprocess:proc.proc"), null); - assertThat(inProcessNameResolver).isNotNull(); - inProcessNameResolver.start(mockListener); - verify(mockListener).onResult(resultCaptor.capture()); - NameResolver.ResolutionResult result = resultCaptor.getValue(); - List list = result.getAddresses(); - assertThat(list).isNotNull(); - assertThat(list).hasSize(1); - EquivalentAddressGroup eag = list.get(0); - assertThat(eag).isNotNull(); - List addresses = eag.getAddresses(); - assertThat(addresses).hasSize(1); - assertThat(addresses.get(0)).isInstanceOf(InProcessSocketAddress.class); - InProcessSocketAddress domainSocketAddress = (InProcessSocketAddress) addresses.get(0); - assertThat(domainSocketAddress.getName()).isEqualTo("proc.proc"); - } - - @Test - public void testAbsolutePath() { - InProcessNameResolver inProcessNameResolver = - inProcessNameResolverProvider.newNameResolver(URI.create("inprocess:/proc.proc"), null); - assertThat(inProcessNameResolver).isNotNull(); - inProcessNameResolver.start(mockListener); - verify(mockListener).onResult(resultCaptor.capture()); - NameResolver.ResolutionResult result = resultCaptor.getValue(); - List list = result.getAddresses(); - assertThat(list).isNotNull(); - assertThat(list).hasSize(1); - EquivalentAddressGroup eag = list.get(0); - assertThat(eag).isNotNull(); - List addresses = eag.getAddresses(); - assertThat(addresses).hasSize(1); - assertThat(addresses.get(0)).isInstanceOf(InProcessSocketAddress.class); - InProcessSocketAddress domainSocketAddress = (InProcessSocketAddress) addresses.get(0); - assertThat(domainSocketAddress.getName()).isEqualTo("/proc.proc"); - } - - @Test - public void testAbsoluteAlternatePath() { - InProcessNameResolver udsNameResolver = - inProcessNameResolverProvider.newNameResolver(URI.create("inprocess:///proc.proc"), null); - assertThat(udsNameResolver).isNotNull(); - udsNameResolver.start(mockListener); - verify(mockListener).onResult(resultCaptor.capture()); - NameResolver.ResolutionResult result = resultCaptor.getValue(); - List list = result.getAddresses(); - assertThat(list).isNotNull(); - assertThat(list).hasSize(1); - EquivalentAddressGroup eag = list.get(0); - assertThat(eag).isNotNull(); - List addresses = eag.getAddresses(); - assertThat(addresses).hasSize(1); - assertThat(addresses.get(0)).isInstanceOf(InProcessSocketAddress.class); - InProcessSocketAddress domainSocketAddress = (InProcessSocketAddress) addresses.get(0); - assertThat(domainSocketAddress.getName()).isEqualTo("/proc.proc"); - } - - @Test - public void testWrongScheme() { - assertNull(inProcessNameResolverProvider.newNameResolver(URI.create( - "badscheme://localhost/proc.proc"), null)); - } - - @Test - public void testPathWithAuthority() { - try { - inProcessNameResolverProvider.newNameResolver( - URI.create("inprocess://localhost/proc.proc"), null); - fail("exception expected"); - } catch (IllegalArgumentException e) { - assertThat(e).hasMessageThat().isEqualTo( - "non-null authority not supported"); - } - } -} diff --git a/inprocess/src/test/java/io/grpc/inprocess/InProcessNameResolverTest.java b/inprocess/src/test/java/io/grpc/inprocess/InProcessNameResolverTest.java deleted file mode 100644 index b48aab12323..00000000000 --- a/inprocess/src/test/java/io/grpc/inprocess/InProcessNameResolverTest.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright 2023 The gRPC Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.grpc.inprocess; - -import static com.google.common.truth.Truth.assertThat; -import static org.junit.Assert.fail; -import static org.mockito.Mockito.verify; - -import io.grpc.EquivalentAddressGroup; -import io.grpc.NameResolver; -import java.net.SocketAddress; -import java.util.List; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.JUnit4; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.Mock; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; - -/** Unit tests for {@link InProcessNameResolver}. */ -@RunWith(JUnit4.class) -public class InProcessNameResolverTest { - - @Rule - public final MockitoRule mocks = MockitoJUnit.rule(); - - @Mock - private NameResolver.Listener2 mockListener; - - @Captor - private ArgumentCaptor resultCaptor; - - private InProcessNameResolver inProcessNameResolver; - - @Test - public void testValidTargetPath() { - inProcessNameResolver = new InProcessNameResolver(null, "proc.proc"); - inProcessNameResolver.start(mockListener); - verify(mockListener).onResult(resultCaptor.capture()); - NameResolver.ResolutionResult result = resultCaptor.getValue(); - List list = result.getAddresses(); - assertThat(list).isNotNull(); - assertThat(list).hasSize(1); - EquivalentAddressGroup eag = list.get(0); - assertThat(eag).isNotNull(); - List addresses = eag.getAddresses(); - assertThat(addresses).hasSize(1); - assertThat(addresses.get(0)).isInstanceOf(InProcessSocketAddress.class); - InProcessSocketAddress socketAddress = (InProcessSocketAddress) addresses.get(0); - assertThat(socketAddress.getName()).isEqualTo("proc.proc"); - assertThat(inProcessNameResolver.getServiceAuthority()).isEqualTo("proc.proc"); - } - - @Test - public void testNonNullAuthority() { - try { - inProcessNameResolver = new InProcessNameResolver("authority", "proc.proc"); - fail("exception expected"); - } catch (IllegalArgumentException e) { - assertThat(e).hasMessageThat().isEqualTo("non-null authority not supported"); - } - } -} diff --git a/inprocess/src/test/java/io/grpc/inprocess/InProcessTransportTest.java b/inprocess/src/test/java/io/grpc/inprocess/InProcessTransportTest.java index 420a9c4a8e7..9e63a3d9d7c 100644 --- a/inprocess/src/test/java/io/grpc/inprocess/InProcessTransportTest.java +++ b/inprocess/src/test/java/io/grpc/inprocess/InProcessTransportTest.java @@ -174,7 +174,7 @@ public Listener startCall(ServerCall call, Metadata headers) { fail("Call should fail."); } catch (ExecutionException ex) { StatusRuntimeException s = (StatusRuntimeException)ex.getCause(); - assertEquals(Code.UNIMPLEMENTED, s.getStatus().getCode()); + assertEquals(s.getStatus().getCode(), Code.UNIMPLEMENTED); } } } diff --git a/interop-testing/src/test/java/io/grpc/testing/integration/Http2NettyLocalChannelTest.java b/interop-testing/src/test/java/io/grpc/testing/integration/Http2NettyLocalChannelTest.java index 6659af68ae0..778e8bdf97c 100644 --- a/interop-testing/src/test/java/io/grpc/testing/integration/Http2NettyLocalChannelTest.java +++ b/interop-testing/src/test/java/io/grpc/testing/integration/Http2NettyLocalChannelTest.java @@ -57,7 +57,7 @@ protected NettyChannelBuilder createChannelBuilder() { NettyChannelBuilder builder = NettyChannelBuilder .forAddress(new LocalAddress("in-process-1")) .negotiationType(NegotiationType.PLAINTEXT) - .channelType(LocalChannel.class, LocalAddress.class) + .channelType(LocalChannel.class) .eventLoopGroup(eventLoopGroup) .flowControlWindow(AbstractInteropTest.TEST_FLOW_CONTROL_WINDOW) .maxInboundMessageSize(AbstractInteropTest.MAX_MESSAGE_SIZE); diff --git a/interop-testing/src/test/java/io/grpc/testing/integration/RetryTest.java b/interop-testing/src/test/java/io/grpc/testing/integration/RetryTest.java index 45ea303e5cf..72ed8bf975b 100644 --- a/interop-testing/src/test/java/io/grpc/testing/integration/RetryTest.java +++ b/interop-testing/src/test/java/io/grpc/testing/integration/RetryTest.java @@ -191,7 +191,7 @@ private void createNewChannel() { rawServiceConfig.put("methodConfig", Arrays.asList(methodConfig)); channel = cleanupRule.register( NettyChannelBuilder.forAddress(localAddress) - .channelType(LocalChannel.class, LocalAddress.class) + .channelType(LocalChannel.class) .eventLoopGroup(group) .usePlaintext() .enableRetry() diff --git a/netty/src/main/java/io/grpc/netty/InternalNettyChannelBuilder.java b/netty/src/main/java/io/grpc/netty/InternalNettyChannelBuilder.java index 1848b475d59..c5ad99181ef 100644 --- a/netty/src/main/java/io/grpc/netty/InternalNettyChannelBuilder.java +++ b/netty/src/main/java/io/grpc/netty/InternalNettyChannelBuilder.java @@ -23,7 +23,6 @@ import io.grpc.internal.SharedResourcePool; import io.grpc.internal.TransportTracer; import io.netty.channel.socket.nio.NioSocketChannel; -import java.net.InetSocketAddress; /** * Internal {@link NettyChannelBuilder} accessor. This is intended for usage internal to the gRPC @@ -101,7 +100,7 @@ public static void setStatsRecordRetryMetrics(NettyChannelBuilder builder, boole * io.netty.channel.EventLoopGroup}. */ public static void useNioTransport(NettyChannelBuilder builder) { - builder.channelType(NioSocketChannel.class, InetSocketAddress.class); + builder.channelType(NioSocketChannel.class); builder .eventLoopGroupPool(SharedResourcePool.forResource(Utils.NIO_WORKER_EVENT_LOOP_GROUP)); } diff --git a/netty/src/main/java/io/grpc/netty/NettyChannelBuilder.java b/netty/src/main/java/io/grpc/netty/NettyChannelBuilder.java index 305ad128454..138e11f6dfe 100644 --- a/netty/src/main/java/io/grpc/netty/NettyChannelBuilder.java +++ b/netty/src/main/java/io/grpc/netty/NettyChannelBuilder.java @@ -59,8 +59,6 @@ import io.netty.handler.ssl.SslContext; import java.net.InetSocketAddress; import java.net.SocketAddress; -import java.util.Collection; -import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.concurrent.Executor; @@ -118,8 +116,6 @@ public final class NettyChannelBuilder extends ForwardingChannelBuilder2 transportSocketType = InetSocketAddress.class; - /** * Creates a new builder with the given server address. This factory method is primarily intended * for using Netty Channel types other than SocketChannel. {@link #forAddress(String, int)} should @@ -264,23 +260,8 @@ private static String getAuthorityFromAddress(SocketAddress address) { */ @CanIgnoreReturnValue public NettyChannelBuilder channelType(Class channelType) { - return channelType(channelType, null); - } - - /** - * Similar to {@link #channelType(Class)} above but allows the - * caller to specify the socket-type associated with the channelType. - * - * @param channelType the type of {@link Channel} to use. - * @param transportSocketType the associated {@link SocketAddress} type. If {@code null}, then - * no compatibility check is performed between channel transport and name-resolver addresses. - */ - @CanIgnoreReturnValue - public NettyChannelBuilder channelType(Class channelType, - @Nullable Class transportSocketType) { checkNotNull(channelType, "channelType"); - return channelFactory(new ReflectiveChannelFactory<>(channelType), - transportSocketType); + return channelFactory(new ReflectiveChannelFactory<>(channelType)); } /** @@ -298,22 +279,7 @@ public NettyChannelBuilder channelType(Class channelType, */ @CanIgnoreReturnValue public NettyChannelBuilder channelFactory(ChannelFactory channelFactory) { - return channelFactory(channelFactory, null); - } - - /** - * Similar to {@link #channelFactory(ChannelFactory)} above but allows the - * caller to specify the socket-type associated with the channelFactory. - * - * @param channelFactory the {@link ChannelFactory} to use. - * @param transportSocketType the associated {@link SocketAddress} type. If {@code null}, then - * no compatibility check is performed between channel transport and name-resolver addresses. - */ - @CanIgnoreReturnValue - public NettyChannelBuilder channelFactory(ChannelFactory channelFactory, - @Nullable Class transportSocketType) { this.channelFactory = checkNotNull(channelFactory, "channelFactory"); - this.transportSocketType = transportSocketType; return this; } @@ -575,7 +541,7 @@ ClientTransportFactory buildTransportFactory() { negotiator, channelFactory, channelOptions, eventLoopGroupPool, autoFlowControl, flowControlWindow, maxInboundMessageSize, maxHeaderListSize, keepAliveTimeNanos, keepAliveTimeoutNanos, keepAliveWithoutCalls, - transportTracerFactory, localSocketPicker, useGetForSafeMethods, transportSocketType); + transportTracerFactory, localSocketPicker, useGetForSafeMethods); } @VisibleForTesting @@ -660,10 +626,6 @@ NettyChannelBuilder setTransportTracerFactory(TransportTracer.Factory transportT return this; } - static Collection> getSupportedSocketAddressTypes() { - return Collections.singleton(InetSocketAddress.class); - } - private final class DefaultProtocolNegotiator implements ProtocolNegotiator.ClientFactory { private NegotiationType negotiationType = NegotiationType.TLS; private SslContext sslContext; @@ -718,7 +680,6 @@ private static final class NettyTransportFactory implements ClientTransportFacto private final boolean useGetForSafeMethods; private boolean closed; - private final Class transportSocketType; NettyTransportFactory( ProtocolNegotiator protocolNegotiator, @@ -727,7 +688,7 @@ private static final class NettyTransportFactory implements ClientTransportFacto boolean autoFlowControl, int flowControlWindow, int maxMessageSize, int maxHeaderListSize, long keepAliveTimeNanos, long keepAliveTimeoutNanos, boolean keepAliveWithoutCalls, TransportTracer.Factory transportTracerFactory, LocalSocketPicker localSocketPicker, - boolean useGetForSafeMethods, Class transportSocketType) { + boolean useGetForSafeMethods) { this.protocolNegotiator = checkNotNull(protocolNegotiator, "protocolNegotiator"); this.channelFactory = channelFactory; this.channelOptions = new HashMap, Object>(channelOptions); @@ -745,7 +706,6 @@ private static final class NettyTransportFactory implements ClientTransportFacto this.localSocketPicker = localSocketPicker != null ? localSocketPicker : new LocalSocketPicker(); this.useGetForSafeMethods = useGetForSafeMethods; - this.transportSocketType = transportSocketType; } @Override @@ -799,7 +759,7 @@ public SwapChannelCredentialsResult swapChannelCredentials(ChannelCredentials ch result.negotiator.newNegotiator(), channelFactory, channelOptions, groupPool, autoFlowControl, flowControlWindow, maxMessageSize, maxHeaderListSize, keepAliveTimeNanos, keepAliveTimeoutNanos, keepAliveWithoutCalls, transportTracerFactory, localSocketPicker, - useGetForSafeMethods, transportSocketType); + useGetForSafeMethods); return new SwapChannelCredentialsResult(factory, result.callCredentials); } @@ -813,11 +773,5 @@ public void close() { protocolNegotiator.close(); groupPool.returnObject(group); } - - @Override - public Collection> getSupportedSocketAddressTypes() { - return transportSocketType == null ? null - : Collections.singleton(transportSocketType); - } } } diff --git a/netty/src/main/java/io/grpc/netty/NettyChannelProvider.java b/netty/src/main/java/io/grpc/netty/NettyChannelProvider.java index 1b22a95a44b..7cc77c150a0 100644 --- a/netty/src/main/java/io/grpc/netty/NettyChannelProvider.java +++ b/netty/src/main/java/io/grpc/netty/NettyChannelProvider.java @@ -19,8 +19,10 @@ import io.grpc.ChannelCredentials; import io.grpc.Internal; import io.grpc.ManagedChannelProvider; +import java.net.InetSocketAddress; import java.net.SocketAddress; import java.util.Collection; +import java.util.Collections; /** Provider for {@link NettyChannelBuilder} instances. */ @Internal @@ -57,6 +59,6 @@ public NewChannelBuilderResult newChannelBuilder(String target, ChannelCredentia @Override protected Collection> getSupportedSocketAddressTypes() { - return NettyChannelBuilder.getSupportedSocketAddressTypes(); + return Collections.singleton(InetSocketAddress.class); } } diff --git a/netty/src/main/java/io/grpc/netty/UdsNameResolverProvider.java b/netty/src/main/java/io/grpc/netty/UdsNameResolverProvider.java index 9f594193b4c..ffc07ff6ecb 100644 --- a/netty/src/main/java/io/grpc/netty/UdsNameResolverProvider.java +++ b/netty/src/main/java/io/grpc/netty/UdsNameResolverProvider.java @@ -65,7 +65,7 @@ protected int priority() { } @Override - public Collection> getProducedSocketAddressTypes() { + protected Collection> getProducedSocketAddressTypes() { return Collections.singleton(DomainSocketAddress.class); } } diff --git a/netty/src/main/java/io/grpc/netty/UdsNettyChannelProvider.java b/netty/src/main/java/io/grpc/netty/UdsNettyChannelProvider.java index 4e9895da0a8..59b50657a69 100644 --- a/netty/src/main/java/io/grpc/netty/UdsNettyChannelProvider.java +++ b/netty/src/main/java/io/grpc/netty/UdsNettyChannelProvider.java @@ -16,7 +16,6 @@ package io.grpc.netty; -import com.google.common.base.Preconditions; import io.grpc.ChannelCredentials; import io.grpc.Internal; import io.grpc.ManagedChannelProvider; @@ -52,12 +51,11 @@ public NettyChannelBuilder builderForTarget(String target) { @Override public NewChannelBuilderResult newChannelBuilder(String target, ChannelCredentials creds) { - Preconditions.checkState(isAvailable()); NewChannelBuilderResult result = new NettyChannelProvider().newChannelBuilder(target, creds); if (result.getChannelBuilder() != null) { ((NettyChannelBuilder) result.getChannelBuilder()) .eventLoopGroupPool(SharedResourcePool.forResource(Utils.DEFAULT_WORKER_EVENT_LOOP_GROUP)) - .channelType(Utils.EPOLL_DOMAIN_CLIENT_CHANNEL_TYPE, DomainSocketAddress.class); + .channelType(Utils.EPOLL_DOMAIN_CLIENT_CHANNEL_TYPE); } return result; } diff --git a/netty/src/test/java/io/grpc/netty/NettyChannelBuilderTest.java b/netty/src/test/java/io/grpc/netty/NettyChannelBuilderTest.java index 8a34a5d24b7..032b040528b 100644 --- a/netty/src/test/java/io/grpc/netty/NettyChannelBuilderTest.java +++ b/netty/src/test/java/io/grpc/netty/NettyChannelBuilderTest.java @@ -32,7 +32,6 @@ import io.netty.channel.Channel; import io.netty.channel.ChannelFactory; import io.netty.channel.EventLoopGroup; -import io.netty.channel.local.LocalAddress; import io.netty.channel.local.LocalChannel; import io.netty.handler.ssl.SslContext; import java.net.InetSocketAddress; @@ -81,14 +80,9 @@ public void overrideAuthorityIsReadableForTarget() throws Exception { overrideAuthorityIsReadableHelper(builder, "override:5678"); } - private static SocketAddress getTestSocketAddress() { - return new InetSocketAddress("1.1.1.1", 80); - } - @Test public void overrideAuthorityIsReadableForSocketAddress() throws Exception { - NettyChannelBuilder builder = NettyChannelBuilder.forAddress( - getTestSocketAddress()); + NettyChannelBuilder builder = NettyChannelBuilder.forAddress(new SocketAddress(){}); overrideAuthorityIsReadableHelper(builder, "override:5678"); } @@ -105,7 +99,7 @@ private void overrideAuthorityIsReadableHelper(NettyChannelBuilder builder, @Test public void failOverrideInvalidAuthority() { - NettyChannelBuilder builder = new NettyChannelBuilder(getTestSocketAddress()); + NettyChannelBuilder builder = new NettyChannelBuilder(new SocketAddress(){}); thrown.expect(IllegalArgumentException.class); thrown.expectMessage("Invalid authority:"); @@ -115,7 +109,7 @@ public void failOverrideInvalidAuthority() { @Test public void disableCheckAuthorityAllowsInvalidAuthority() { - NettyChannelBuilder builder = new NettyChannelBuilder(getTestSocketAddress()) + NettyChannelBuilder builder = new NettyChannelBuilder(new SocketAddress(){}) .disableCheckAuthority(); Object unused = builder.overrideAuthority("[invalidauthority") @@ -125,7 +119,7 @@ public void disableCheckAuthorityAllowsInvalidAuthority() { @Test public void enableCheckAuthorityFailOverrideInvalidAuthority() { - NettyChannelBuilder builder = new NettyChannelBuilder(getTestSocketAddress()) + NettyChannelBuilder builder = new NettyChannelBuilder(new SocketAddress(){}) .disableCheckAuthority() .enableCheckAuthority(); @@ -145,14 +139,14 @@ public void failInvalidAuthority() { @Test public void sslContextCanBeNull() { - NettyChannelBuilder builder = new NettyChannelBuilder(getTestSocketAddress()); + NettyChannelBuilder builder = new NettyChannelBuilder(new SocketAddress(){}); builder.sslContext(null); } @Test public void failIfSslContextIsNotClient() { SslContext sslContext = mock(SslContext.class); - NettyChannelBuilder builder = new NettyChannelBuilder(getTestSocketAddress()); + NettyChannelBuilder builder = new NettyChannelBuilder(new SocketAddress(){}); thrown.expect(IllegalArgumentException.class); thrown.expectMessage("Server SSL context can not be used for client channel"); @@ -174,7 +168,7 @@ public void failNegotiationTypeWithChannelCredentials_target() { @Test public void failNegotiationTypeWithChannelCredentials_socketAddress() { NettyChannelBuilder builder = NettyChannelBuilder.forAddress( - getTestSocketAddress(), InsecureChannelCredentials.create()); + new SocketAddress(){}, InsecureChannelCredentials.create()); thrown.expect(IllegalStateException.class); thrown.expectMessage("Cannot change security when using ChannelCredentials"); @@ -271,7 +265,7 @@ public void assertEventLoopAndChannelType_onlyGroupProvided() { @Test public void assertEventLoopAndChannelType_onlyTypeProvided() { NettyChannelBuilder builder = NettyChannelBuilder.forTarget("fakeTarget"); - builder.channelType(LocalChannel.class, LocalAddress.class); + builder.channelType(LocalChannel.class); thrown.expect(IllegalStateException.class); thrown.expectMessage("Both EventLoopGroup and ChannelType should be provided"); @@ -304,7 +298,7 @@ public void assertEventLoopAndChannelType_usingDefault() { public void assertEventLoopAndChannelType_bothProvided() { NettyChannelBuilder builder = NettyChannelBuilder.forTarget("fakeTarget"); builder.eventLoopGroup(mock(EventLoopGroup.class)); - builder.channelType(LocalChannel.class, LocalAddress.class); + builder.channelType(LocalChannel.class); builder.assertEventLoopAndChannelType(); } diff --git a/okhttp/src/main/java/io/grpc/okhttp/OkHttpChannelBuilder.java b/okhttp/src/main/java/io/grpc/okhttp/OkHttpChannelBuilder.java index 24e5083632a..8e9ed75bf76 100644 --- a/okhttp/src/main/java/io/grpc/okhttp/OkHttpChannelBuilder.java +++ b/okhttp/src/main/java/io/grpc/okhttp/OkHttpChannelBuilder.java @@ -60,8 +60,6 @@ import java.security.KeyStore; import java.security.PrivateKey; import java.security.cert.X509Certificate; -import java.util.Collection; -import java.util.Collections; import java.util.EnumSet; import java.util.Set; import java.util.concurrent.Executor; @@ -724,10 +722,6 @@ static TrustManager[] createTrustManager(byte[] rootCerts) throws GeneralSecurit return trustManagerFactory.getTrustManagers(); } - static Collection> getSupportedSocketAddressTypes() { - return Collections.singleton(InetSocketAddress.class); - } - static final class SslSocketFactoryResult { /** {@code null} implies plaintext if {@code error == null}. */ public final SSLSocketFactory factory; @@ -904,10 +898,5 @@ public void close() { executorPool.returnObject(executor); scheduledExecutorServicePool.returnObject(scheduledExecutorService); } - - @Override - public Collection> getSupportedSocketAddressTypes() { - return OkHttpChannelBuilder.getSupportedSocketAddressTypes(); - } } } diff --git a/okhttp/src/main/java/io/grpc/okhttp/OkHttpChannelProvider.java b/okhttp/src/main/java/io/grpc/okhttp/OkHttpChannelProvider.java index bf2a9be6fee..17a2512a66a 100644 --- a/okhttp/src/main/java/io/grpc/okhttp/OkHttpChannelProvider.java +++ b/okhttp/src/main/java/io/grpc/okhttp/OkHttpChannelProvider.java @@ -20,8 +20,10 @@ import io.grpc.Internal; import io.grpc.InternalServiceProviders; import io.grpc.ManagedChannelProvider; +import java.net.InetSocketAddress; import java.net.SocketAddress; import java.util.Collection; +import java.util.Collections; /** * Provider for {@link OkHttpChannelBuilder} instances. @@ -62,6 +64,6 @@ public NewChannelBuilderResult newChannelBuilder(String target, ChannelCredentia @Override protected Collection> getSupportedSocketAddressTypes() { - return OkHttpChannelBuilder.getSupportedSocketAddressTypes(); + return Collections.singleton(InetSocketAddress.class); } } diff --git a/xds/src/main/java/io/grpc/xds/XdsNameResolverProvider.java b/xds/src/main/java/io/grpc/xds/XdsNameResolverProvider.java index 6b16c11fc74..4875a85ea63 100644 --- a/xds/src/main/java/io/grpc/xds/XdsNameResolverProvider.java +++ b/xds/src/main/java/io/grpc/xds/XdsNameResolverProvider.java @@ -105,7 +105,7 @@ protected int priority() { } @Override - public Collection> getProducedSocketAddressTypes() { + protected Collection> getProducedSocketAddressTypes() { return Collections.singleton(InetSocketAddress.class); }