@@ -29,7 +29,6 @@ import kafka.network.Processor._
29
29
import kafka .network .RequestChannel .{CloseConnectionResponse , EndThrottlingResponse , NoOpResponse , SendResponse , StartThrottlingResponse }
30
30
import kafka .network .SocketServer ._
31
31
import kafka .server .{ApiVersionManager , BrokerReconfigurable , KafkaConfig }
32
- import org .apache .kafka .network .EndPoint
33
32
import org .apache .kafka .common .message .ApiMessageType .ListenerType
34
33
import kafka .utils ._
35
34
import org .apache .kafka .common .config .ConfigException
@@ -96,7 +95,7 @@ class SocketServer(
96
95
memoryPoolSensor.add(new Meter (TimeUnit .MILLISECONDS , memoryPoolDepletedPercentMetricName, memoryPoolDepletedTimeMetricName))
97
96
private val memoryPool = if (config.queuedMaxBytes > 0 ) new SimpleMemoryPool (config.queuedMaxBytes, config.socketRequestMaxBytes, false , memoryPoolSensor) else MemoryPool .NONE
98
97
// data-plane
99
- private [network] val dataPlaneAcceptors = new ConcurrentHashMap [EndPoint , DataPlaneAcceptor ]()
98
+ private [network] val dataPlaneAcceptors = new ConcurrentHashMap [Endpoint , DataPlaneAcceptor ]()
100
99
val dataPlaneRequestChannel = new RequestChannel (maxQueuedRequests, DataPlaneAcceptor .MetricPrefix , time, apiVersionManager.newRequestMetrics)
101
100
102
101
private [this ] val nextProcessorId : AtomicInteger = new AtomicInteger (0 )
@@ -161,8 +160,8 @@ class SocketServer(
161
160
* Therefore, we do not know that any particular request processor will be running by the end of
162
161
* this function -- just that it might be running.
163
162
*
164
- * @param authorizerFutures Future per [[EndPoint ]] used to wait before starting the
165
- * processor corresponding to the [[EndPoint ]]. Any endpoint
163
+ * @param authorizerFutures Future per [[Endpoint ]] used to wait before starting the
164
+ * processor corresponding to the [[Endpoint ]]. Any endpoint
166
165
* that does not appear in this map will be started once all
167
166
* authorizerFutures are complete.
168
167
*
@@ -181,7 +180,7 @@ class SocketServer(
181
180
// Because of ephemeral ports, we need to match acceptors to futures by looking at
182
181
// the listener name, rather than the endpoint object.
183
182
val authorizerFuture = authorizerFutures.find {
184
- case (endpoint, _) => acceptor.endPoint.listenerName.value(). equals(endpoint.listenerName().get ())
183
+ case (endpoint, _) => acceptor.endPoint.listenerName.equals(endpoint.listenerName())
185
184
} match {
186
185
case None => allAuthorizerFuturesComplete
187
186
case Some ((_, future)) => future
@@ -210,23 +209,24 @@ class SocketServer(
210
209
enableFuture
211
210
}
212
211
213
- private def createDataPlaneAcceptorAndProcessors (endpoint : EndPoint ): Unit = synchronized {
212
+ private def createDataPlaneAcceptorAndProcessors (endpoint : Endpoint ): Unit = synchronized {
214
213
if (stopped) {
215
214
throw new RuntimeException (" Can't create new data plane acceptor and processors: SocketServer is stopped." )
216
215
}
217
- val parsedConfigs = config.valuesFromThisConfigWithPrefixOverride(endpoint.listenerName.configPrefix)
218
- connectionQuotas.addListener(config, endpoint.listenerName)
219
- val isPrivilegedListener = config.interBrokerListenerName == endpoint.listenerName
216
+ val listenerName = ListenerName .normalised(endpoint.listenerName)
217
+ val parsedConfigs = config.valuesFromThisConfigWithPrefixOverride(listenerName.configPrefix)
218
+ connectionQuotas.addListener(config, listenerName)
219
+ val isPrivilegedListener = config.interBrokerListenerName == listenerName
220
220
val dataPlaneAcceptor = createDataPlaneAcceptor(endpoint, isPrivilegedListener, dataPlaneRequestChannel)
221
221
config.addReconfigurable(dataPlaneAcceptor)
222
222
dataPlaneAcceptor.configure(parsedConfigs)
223
223
dataPlaneAcceptors.put(endpoint, dataPlaneAcceptor)
224
- info(s " Created data-plane acceptor and processors for endpoint : ${endpoint. listenerName}" )
224
+ info(s " Created data-plane acceptor and processors for endpoint : ${listenerName}" )
225
225
}
226
226
227
- private def endpoints = config.listeners.map(l => l.listenerName -> l).toMap
227
+ private def endpoints = config.listeners.map(l => ListenerName .normalised( l.listenerName) -> l).toMap
228
228
229
- protected def createDataPlaneAcceptor (endPoint : EndPoint , isPrivilegedListener : Boolean , requestChannel : RequestChannel ): DataPlaneAcceptor = {
229
+ protected def createDataPlaneAcceptor (endPoint : Endpoint , isPrivilegedListener : Boolean , requestChannel : RequestChannel ): DataPlaneAcceptor = {
230
230
new DataPlaneAcceptor (this , endPoint, config, nodeId, connectionQuotas, time, isPrivilegedListener, requestChannel, metrics, credentialProvider, logContext, memoryPool, apiVersionManager)
231
231
}
232
232
@@ -277,7 +277,7 @@ class SocketServer(
277
277
/**
278
278
* This method is called to dynamically add listeners.
279
279
*/
280
- def addListeners (listenersAdded : Seq [EndPoint ]): Unit = synchronized {
280
+ def addListeners (listenersAdded : Seq [Endpoint ]): Unit = synchronized {
281
281
if (stopped) {
282
282
throw new RuntimeException (" can't add new listeners: SocketServer is stopped." )
283
283
}
@@ -297,10 +297,10 @@ class SocketServer(
297
297
}
298
298
}
299
299
300
- def removeListeners (listenersRemoved : Seq [EndPoint ]): Unit = synchronized {
300
+ def removeListeners (listenersRemoved : Seq [Endpoint ]): Unit = synchronized {
301
301
info(s " Removing data-plane listeners for endpoints $listenersRemoved" )
302
302
listenersRemoved.foreach { endpoint =>
303
- connectionQuotas.removeListener(config, endpoint.listenerName)
303
+ connectionQuotas.removeListener(config, ListenerName .normalised( endpoint.listenerName) )
304
304
dataPlaneAcceptors.asScala.remove(endpoint).foreach { acceptor =>
305
305
acceptor.beginShutdown()
306
306
acceptor.close()
@@ -345,7 +345,7 @@ class SocketServer(
345
345
// For test usage
346
346
def dataPlaneAcceptor (listenerName : String ): Option [DataPlaneAcceptor ] = {
347
347
dataPlaneAcceptors.asScala.foreach { case (endPoint, acceptor) =>
348
- if (endPoint.listenerName.value() == listenerName)
348
+ if (endPoint.listenerName == listenerName)
349
349
return Some (acceptor)
350
350
}
351
351
None
@@ -376,7 +376,7 @@ object DataPlaneAcceptor {
376
376
}
377
377
378
378
class DataPlaneAcceptor (socketServer : SocketServer ,
379
- endPoint : EndPoint ,
379
+ endPoint : Endpoint ,
380
380
config : KafkaConfig ,
381
381
nodeId : Int ,
382
382
connectionQuotas : ConnectionQuotas ,
@@ -409,7 +409,7 @@ class DataPlaneAcceptor(socketServer: SocketServer,
409
409
* Returns the listener name associated with this reconfigurable. Listener-specific
410
410
* configs corresponding to this listener name are provided for reconfiguration.
411
411
*/
412
- override def listenerName (): ListenerName = endPoint.listenerName
412
+ override def listenerName (): ListenerName = ListenerName .normalised( endPoint.listenerName)
413
413
414
414
/**
415
415
* Returns the names of configs that may be reconfigured.
@@ -477,7 +477,7 @@ class DataPlaneAcceptor(socketServer: SocketServer,
477
477
* Thread that accepts and configures new connections. There is one of these per endpoint.
478
478
*/
479
479
private [kafka] abstract class Acceptor (val socketServer : SocketServer ,
480
- val endPoint : EndPoint ,
480
+ val endPoint : Endpoint ,
481
481
var config : KafkaConfig ,
482
482
nodeId : Int ,
483
483
val connectionQuotas : ConnectionQuotas ,
@@ -523,7 +523,7 @@ private[kafka] abstract class Acceptor(val socketServer: SocketServer,
523
523
private val backwardCompatibilityMetricGroup = new KafkaMetricsGroup (" kafka.network" , " Acceptor" )
524
524
private val blockedPercentMeterMetricName = backwardCompatibilityMetricGroup.metricName(
525
525
s " ${metricPrefix()}AcceptorBlockedPercent " ,
526
- Map (ListenerMetricTag -> endPoint.listenerName.value ).asJava)
526
+ Map (ListenerMetricTag -> endPoint.listenerName).asJava)
527
527
private val blockedPercentMeter = metricsGroup.newMeter(blockedPercentMeterMetricName," blocked time" , TimeUnit .NANOSECONDS )
528
528
private var currentProcessorIndex = 0
529
529
private [network] val throttledSockets = new mutable.PriorityQueue [DelayedCloseSocket ]()
@@ -636,7 +636,7 @@ private[kafka] abstract class Acceptor(val socketServer: SocketServer,
636
636
new InetSocketAddress (host, port)
637
637
}
638
638
val serverChannel = socketServer.socketFactory.openServerSocket(
639
- endPoint.listenerName.value() ,
639
+ endPoint.listenerName,
640
640
socketAddress,
641
641
listenBacklogSize,
642
642
recvBufferSize)
@@ -690,14 +690,15 @@ private[kafka] abstract class Acceptor(val socketServer: SocketServer,
690
690
private def accept (key : SelectionKey ): Option [SocketChannel ] = {
691
691
val serverSocketChannel = key.channel().asInstanceOf [ServerSocketChannel ]
692
692
val socketChannel = serverSocketChannel.accept()
693
+ val listenerName = ListenerName .normalised(endPoint.listenerName)
693
694
try {
694
- connectionQuotas.inc(endPoint. listenerName, socketChannel.socket.getInetAddress, blockedPercentMeter)
695
+ connectionQuotas.inc(listenerName, socketChannel.socket.getInetAddress, blockedPercentMeter)
695
696
configureAcceptedSocketChannel(socketChannel)
696
697
Some (socketChannel)
697
698
} catch {
698
699
case e : TooManyConnectionsException =>
699
700
info(s " Rejected connection from ${e.ip}, address already has the configured maximum of ${e.count} connections. " )
700
- connectionQuotas.closeChannel(this , endPoint. listenerName, socketChannel)
701
+ connectionQuotas.closeChannel(this , listenerName, socketChannel)
701
702
None
702
703
case e : ConnectionThrottledException =>
703
704
val ip = socketChannel.socket.getInetAddress
@@ -707,7 +708,7 @@ private[kafka] abstract class Acceptor(val socketServer: SocketServer,
707
708
None
708
709
case e : IOException =>
709
710
error(s " Encountered an error while configuring the connection, closing it. " , e)
710
- connectionQuotas.closeChannel(this , endPoint. listenerName, socketChannel)
711
+ connectionQuotas.closeChannel(this , listenerName, socketChannel)
711
712
None
712
713
}
713
714
}
@@ -749,7 +750,7 @@ private[kafka] abstract class Acceptor(val socketServer: SocketServer,
749
750
def wakeup (): Unit = nioSelector.wakeup()
750
751
751
752
def addProcessors (toCreate : Int ): Unit = synchronized {
752
- val listenerName = endPoint.listenerName
753
+ val listenerName = ListenerName .normalised( endPoint.listenerName)
753
754
val securityProtocol = endPoint.securityProtocol
754
755
val listenerProcessors = new ArrayBuffer [Processor ]()
755
756
0 commit comments