I'm running grpc-java & grpc-kotlin with UDS on an...
# grpc
d
I'm running grpc-java & grpc-kotlin with UDS on android, every now and then we see our channel entering
TransientFailure
on Connecting. After setting up
maxTraceEvent
we see the following:
Copy code
ManagementService connection state: Connecting
[{0}] Failed to resolve name. status={1}
ManagementService connection state: TransientFailure
[{0}] Failed to resolve name. status={1}
ManagementService connection state: Connecting
ManagementService connection state: Ready
Any ideas why we would get
Failed to resolve name
?
Follow up on this, setup logging and got more detailed message:
Copy code
[Channel<1>: (dns:///localhost)] Failed to resolve name. status=Status{code=UNAVAILABLE, description=Unable to resolve host localhost, cause=java.lang.RuntimeException: java.net.UnknownHostException: Unable to resolve host "localhost": No address associated with hostname
	at io.grpc.internal.DnsNameResolver.resolveAddresses(DnsNameResolver.java:223)
	at io.grpc.internal.DnsNameResolver.doResolve(DnsNameResolver.java:282)
	at io.grpc.internal.DnsNameResolver$Resolve.run(DnsNameResolver.java:318)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
	at java.lang.Thread.run(Thread.java:1012)
Caused by: java.net.UnknownHostException: Unable to resolve host "localhost": No address associated with hostname
	at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:156)
	at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:103)
	at java.net.InetAddress.getAllByName(InetAddress.java:1152)
	at io.grpc.internal.DnsNameResolver$JdkAddressResolver.resolveAddress(DnsNameResolver.java:632)
	at io.grpc.internal.DnsNameResolver.resolveAddresses(DnsNameResolver.java:219)
	at io.grpc.internal.DnsNameResolver.doResolve(DnsNameResolver.java:282) 
	at io.grpc.internal.DnsNameResolver$Resolve.run(DnsNameResolver.java:318) 
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) 
	at java.lang.Thread.run(Thread.java:1012) 
Caused by: android.system.GaiException: android_getaddrinfo failed: EAI_NODATA (No address associated with hostname)
	at libcore.io.Linux.android_getaddrinfo(Native Method)
	at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:133)
	at libcore.io.BlockGuardOs.android_getaddrinfo(BlockGuardOs.java:222)
	at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:133)
	at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:135)
	at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:103) 
	at java.net.InetAddress.getAllByName(InetAddress.java:1152) 
	at io.grpc.internal.DnsNameResolver$JdkAddressResolver.resolveAddress(DnsNameResolver.java:632) 
	at io.grpc.internal.DnsNameResolver.resolveAddresses(DnsNameResolver.java:219) 
	at io.grpc.internal.DnsNameResolver.doResolve(DnsNameResolver.java:282) 
	at io.grpc.internal.DnsNameResolver$Resolve.run(DnsNameResolver.java:318) 
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644) 
	at java.lang.Thread.run(Thread.java:1012) 
}
Seems like there is some unnecessary DNS lookup when using UDS.
Found a workaround and created an issue on grpc-java