@@ -13,6 +13,9 @@ sealed trait TrackPartitions extends ConsumerRebalanceListener {
1313 def isRevoked : Boolean
1414
1515 def reset (): Unit
16+
17+ def offsetsToTopicPartitions (offsets : Map [TopicPartition , Long ]): List [TopicPartition ] =
18+ offsets.map { case (tp, _) => tp }.toList
1619}
1720
1821/**
@@ -25,8 +28,10 @@ sealed trait TrackPartitions extends ConsumerRebalanceListener {
2528 * @param consumer The client driver
2629 * @param consumerActor Tha KafkaConsumerActor to notify of partition change events
2730 */
28- private final class TrackPartitionsCommitMode (consumer : KafkaConsumer [_, _], consumerActor : ActorRef )
29- extends TrackPartitions {
31+ private final class TrackPartitionsCommitMode (
32+ consumer : KafkaConsumer [_, _], consumerActor : ActorRef ,
33+ assignedListener : List [TopicPartition ] => Unit ,
34+ revokedListener : List [TopicPartition ] => Unit ) extends TrackPartitions {
3035
3136 private val log = LoggerFactory .getLogger(getClass)
3237
@@ -38,6 +43,8 @@ private final class TrackPartitionsCommitMode(consumer: KafkaConsumer[_, _], con
3843
3944 _revoked = true
4045
46+ revokedListener(partitions.asScala.toList)
47+
4148 // If partitions have been revoked, keep a record of our current position within them.
4249 if (! partitions.isEmpty) {
4350 _offsets = partitions.asScala.map(partition => partition -> consumer.position(partition)).toMap
@@ -55,6 +62,7 @@ private final class TrackPartitionsCommitMode(consumer: KafkaConsumer[_, _], con
5562 val allExisting = _offsets.forall { case (partition, _) => partitions.contains(partition) }
5663
5764 if (allExisting) {
65+ assignedListener(partitions.asScala.toList)
5866 for {
5967 partition <- partitions.asScala
6068 offset <- _offsets.get(partition)
@@ -66,6 +74,9 @@ private final class TrackPartitionsCommitMode(consumer: KafkaConsumer[_, _], con
6674
6775 } else {
6876 consumerActor ! KafkaConsumerActor .RevokeReset
77+
78+ // Invoke client callback to notify revocation of all existing partitions.
79+ revokedListener(offsetsToTopicPartitions(_offsets))
6980 }
7081 }
7182
@@ -113,9 +124,6 @@ private final class TrackPartitionsManualOffset(
113124
114125 log.debug(" onPartitionsAssigned: " + partitions.toString)
115126
116- def offsetsToTopicPartitions (offsets : Map [TopicPartition , Long ]): List [TopicPartition ] =
117- offsets.map { case (tp, _) => tp }.toList
118-
119127 def assign (partitions : List [TopicPartition ]) = {
120128 val offsets = assignedListener(partitions)
121129 for {
0 commit comments