@@ -27,7 +27,7 @@ import kafka.server.ReplicaManager.{AtMinIsrPartitionCountMetricName, FailedIsrU
27
27
import kafka .server .share .DelayedShareFetch
28
28
import kafka .utils ._
29
29
import org .apache .kafka .common .errors ._
30
- import org .apache .kafka .common .internals .Topic
30
+ import org .apache .kafka .common .internals .{ Plugin , Topic }
31
31
import org .apache .kafka .common .message .DeleteRecordsResponseData .DeleteRecordsPartitionResult
32
32
import org .apache .kafka .common .message .DescribeLogDirsResponseData .DescribeLogDirsTopic
33
33
import org .apache .kafka .common .message .ListOffsetsRequestData .{ListOffsetsPartition , ListOffsetsTopic }
@@ -338,7 +338,7 @@ class ReplicaManager(val config: KafkaConfig,
338
338
}
339
339
340
340
// Visible for testing
341
- private [server] val replicaSelectorOpt : Option [ReplicaSelector ] = createReplicaSelector()
341
+ private [server] val replicaSelectorPlugin : Option [Plugin [ ReplicaSelector ]] = createReplicaSelector(metrics )
342
342
343
343
metricsGroup.newGauge(LeaderCountMetricName , () => leaderPartitionsIterator.size)
344
344
// Visible for testing
@@ -1723,8 +1723,8 @@ class ReplicaManager(val config: KafkaConfig,
1723
1723
metadata => findPreferredReadReplica(partition, metadata, params.replicaId, fetchInfo.fetchOffset, fetchTimeMs))
1724
1724
1725
1725
if (preferredReadReplica.isDefined) {
1726
- replicaSelectorOpt .foreach { selector =>
1727
- debug(s " Replica selector ${selector.getClass.getSimpleName} returned preferred replica " +
1726
+ replicaSelectorPlugin .foreach { selector =>
1727
+ debug(s " Replica selector ${selector.get. getClass.getSimpleName} returned preferred replica " +
1728
1728
s " ${preferredReadReplica.get} for ${params.clientMetadata}" )
1729
1729
}
1730
1730
// If a preferred read-replica is set, skip the read
@@ -1890,7 +1890,7 @@ class ReplicaManager(val config: KafkaConfig,
1890
1890
if (FetchRequest .isValidBrokerId(replicaId))
1891
1891
None
1892
1892
else {
1893
- replicaSelectorOpt .flatMap { replicaSelector =>
1893
+ replicaSelectorPlugin .flatMap { replicaSelector =>
1894
1894
val replicaEndpoints = metadataCache.getPartitionReplicaEndpoints(partition.topicPartition,
1895
1895
new ListenerName (clientMetadata.listenerName)).asScala
1896
1896
val replicaInfoSet = mutable.Set [ReplicaView ]()
@@ -1921,7 +1921,7 @@ class ReplicaManager(val config: KafkaConfig,
1921
1921
replicaInfoSet.add(leaderReplica)
1922
1922
1923
1923
val partitionInfo = new DefaultPartitionView (replicaInfoSet.asJava, leaderReplica)
1924
- replicaSelector.select(partition.topicPartition, clientMetadata, partitionInfo).toScala.collect {
1924
+ replicaSelector.get. select(partition.topicPartition, clientMetadata, partitionInfo).toScala.collect {
1925
1925
// Even though the replica selector can return the leader, we don't want to send it out with the
1926
1926
// FetchResponse, so we exclude it here
1927
1927
case selected if ! selected.endpoint.isEmpty && selected != leaderReplica => selected.endpoint.id
@@ -2565,7 +2565,7 @@ class ReplicaManager(val config: KafkaConfig,
2565
2565
delayedShareFetchPurgatory.shutdown()
2566
2566
if (checkpointHW)
2567
2567
checkpointHighWatermarks()
2568
- replicaSelectorOpt .foreach(_.close)
2568
+ replicaSelectorPlugin .foreach(_.close)
2569
2569
removeAllTopicMetrics()
2570
2570
addPartitionsToTxnManager.foreach(_.shutdown())
2571
2571
info(" Shut down completely" )
@@ -2587,11 +2587,11 @@ class ReplicaManager(val config: KafkaConfig,
2587
2587
new ReplicaAlterLogDirsManager (config, this , quotaManager, brokerTopicStats, directoryEventHandler)
2588
2588
}
2589
2589
2590
- private def createReplicaSelector (): Option [ReplicaSelector ] = {
2590
+ private def createReplicaSelector (metrics : Metrics ): Option [Plugin [ ReplicaSelector ] ] = {
2591
2591
config.replicaSelectorClassName.map { className =>
2592
2592
val tmpReplicaSelector : ReplicaSelector = Utils .newInstance(className, classOf [ReplicaSelector ])
2593
2593
tmpReplicaSelector.configure(config.originals())
2594
- tmpReplicaSelector
2594
+ Plugin .wrapInstance( tmpReplicaSelector, metrics, className)
2595
2595
}
2596
2596
}
2597
2597
0 commit comments