Hi Jaikiran,

Thank you for posting this message to net-dev.

TL;DR seems like the specific issue raised against Quarkus has been resolved ( 
by upgrading to a more recent version of ZooKeeper ). 

> On 28 Mar 2020, at 06:43, Jaikiran Pai <jai.forums2...@gmail.com> wrote:
> 
> There's an issue raised in Quarkus repo[1], where Apache Kafka (embedded) no 
> longer starts on Java 14. From what I can see the root cause is this[2].
> 
> JDK-8225499[3] changed the implementation (and even the javadoc) of the 
> InetSocketAddress.toString() which now reads[4]:
> 
> "... 
> 
> If the address is unresolved, <unresolved> is displayed in place of the 
> address literal.
> 
> "
> 
> Previously, until as recent as Java 13[5], it used to be:
> 
> "...
> If the address is unresolved then the part before the colon will only contain 
> the hostname.
> 
> "
> 
> So this looks like an intentional(?)
> 
Correct. This is an intentional change, to improve the string representation. 
See the following CSR https://bugs.openjdk.java.net/browse/JDK-8232002 
> breakage in that toString() API semantics?
> 
FTR - I take exception with the term “breakage” - The change is intentional, 
consideration given to the compatibility impact, and a release note published. 
InetSocketAddress::getHostString was added in Java 7 to retrieve the host, or 
address, string representation.

> I do see that it did make it to the release notes of this version, but given 
> how conservative Java has been in terms of breaking changes, is this change 
> too quick in introducing such a breaking change?
> 
No. As above, code should really be using getHostString, which has been 
available since July 2011. I do not consider this too quick.
> By the way, keeping aside the breaking nature of this change, the current 
> javadoc, I think doesn't reflect what the current implementation returns for 
> unresolved addresses. The javadoc states:
> 
> "If the address is unresolved, <unresolved> is displayed in place of the 
> address literal."
> 
> Note, the "in place of the address literal" part. However, in the current 
> implementation[6], it returns something like - "localhost/<unresolved>:2182". 
> So it doesn't just display the "<unresolved>" literal in the address part but 
> suffixes it to the address part. Should that be clarified?
> 
The InetSocketAddress string representation defers, partly, to 
InetAddress::toString, which specifies the “hostname / literal IP address” 
form. It is this address literal that is replaced with “<unresolved>”. If this 
is not clear from this spec, then it can be clarified.

Can we check if the most recent ZooKeeper is still calling toString, using 
getHostString, or doing something else?

-Chris.

Reply via email to