From 60b02c0b9c324b7397015022b700393c4fd8f5e5 Mon Sep 17 00:00:00 2001 From: Carl Mastrangelo Date: Mon, 15 Oct 2018 16:59:02 -0700 Subject: [PATCH] core: throw exception on resolution failure and no jndi resolver --- .../java/io/grpc/internal/DnsNameResolver.java | 5 ++++- .../io/grpc/internal/DnsNameResolverTest.java | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/io/grpc/internal/DnsNameResolver.java b/core/src/main/java/io/grpc/internal/DnsNameResolver.java index 64d511d3be..7a4b634f06 100644 --- a/core/src/main/java/io/grpc/internal/DnsNameResolver.java +++ b/core/src/main/java/io/grpc/internal/DnsNameResolver.java @@ -21,6 +21,7 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.MoreObjects; import com.google.common.base.Preconditions; +import com.google.common.base.Throwables; import com.google.common.base.Verify; import io.grpc.Attributes; import io.grpc.EquivalentAddressGroup; @@ -355,7 +356,9 @@ final class DnsNameResolver extends NameResolver { } } try { - if (addressesException != null && balancerAddressesException != null) { + if (addressesException != null + && (balancerAddressesException != null || balancerAddresses.isEmpty())) { + Throwables.throwIfUnchecked(addressesException); throw new RuntimeException(addressesException); } } finally { diff --git a/core/src/test/java/io/grpc/internal/DnsNameResolverTest.java b/core/src/test/java/io/grpc/internal/DnsNameResolverTest.java index e98e9c06a2..8ed126b681 100644 --- a/core/src/test/java/io/grpc/internal/DnsNameResolverTest.java +++ b/core/src/test/java/io/grpc/internal/DnsNameResolverTest.java @@ -42,6 +42,7 @@ import io.grpc.internal.DnsNameResolver.ResolutionResults; import io.grpc.internal.DnsNameResolver.ResourceResolver; import io.grpc.internal.DnsNameResolver.ResourceResolverFactory; import io.grpc.internal.SharedResourceHolder.Resource; +import java.io.IOException; import java.net.Inet4Address; import java.net.InetAddress; import java.net.InetSocketAddress; @@ -247,6 +248,23 @@ public class DnsNameResolverTest { verify(mockResolver).resolveAddress(hostname); } + @Test + public void resolveAll_nullResourceResolver_addressFailure() throws Exception { + final String hostname = "addr.fake"; + + AddressResolver mockResolver = mock(AddressResolver.class); + when(mockResolver.resolveAddress(Matchers.anyString())) + .thenThrow(new IOException("no addr")); + ResourceResolver resourceResolver = null; + boolean resovleSrv = true; + boolean resolveTxt = true; + + thrown.expect(RuntimeException.class); + thrown.expectMessage("no addr"); + + DnsNameResolver.resolveAll(mockResolver, resourceResolver, resovleSrv, resolveTxt, hostname); + } + @Test public void resolveAll_presentResourceResolver() throws Exception { final String hostname = "addr.fake";