mdedetrich commented on code in PR #11478: URL: https://github.com/apache/kafka/pull/11478#discussion_r928099336
########## core/src/main/scala/kafka/utils/CoreUtils.scala: ########## @@ -252,16 +255,63 @@ object CoreUtils { listenerListToEndPoints(listeners, securityProtocolMap, true) } + def validateOneIsIpv4AndOtherIpv6(first: String, second: String): Boolean = + (inetAddressValidator.isValidInet4Address(first) && inetAddressValidator.isValidInet6Address(second)) || + (inetAddressValidator.isValidInet6Address(first) && inetAddressValidator.isValidInet4Address(second)) + + def checkDuplicateListenerNames(endpoints: Seq[EndPoint], listeners: String): Unit = { + val distinctListenerNames = endpoints.map(_.listenerName).distinct + require(distinctListenerNames.size == endpoints.size, s"Each listener must have a different name unless you have exactly " + + s"one listener on IPv4 and the other IPv6 on the same port, listeners: $listeners") + } + + def checkDuplicateListenerPorts(endpoints: Seq[EndPoint], listeners: String): Unit = { + val distinctPorts = endpoints.map(_.port).distinct + require(distinctPorts.size == endpoints.map(_.port).size, s"Each listener must have a different port, listeners: $listeners") + } + def listenerListToEndPoints(listeners: String, securityProtocolMap: Map[ListenerName, SecurityProtocol], requireDistinctPorts: Boolean): Seq[EndPoint] = { def validate(endPoints: Seq[EndPoint]): Unit = { - // filter port 0 for unit tests - val portsExcludingZero = endPoints.map(_.port).filter(_ != 0) - val distinctListenerNames = endPoints.map(_.listenerName).distinct - - require(distinctListenerNames.size == endPoints.size, s"Each listener must have a different name, listeners: $listeners") Review Comment: So yeah I completely forgot about the fact that each listener needs its own unique listener name regardless of duplicate ports or not, I have just pushed a commit called `Restore unique listener name validation` which reverts the unique name validation back to what it was. The commit also updates the tests and the documentation in `KafkaConfig`. I didn't add the `props.put(KafkaConfig.ListenersProp, "SSL://[::1]:9096,PLAINTEXT://127.0.0.1:9096,SSL://127.0.0.1:9097")` test as you specified because there is an already existing test which is testing the exact same exception, i.e. ``` props.put(KafkaConfig.ListenersProp, "PLAINTEXT://127.0.0.1:9092,PLAINTEXT://127.0.0.1:9092") caught = assertThrows(classOf[IllegalArgumentException], () => KafkaConfig.fromProps(props)) assertTrue(caught.getMessage.contains("Each listener must have a different name")) ``` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: jira-unsubscr...@kafka.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org