jsancio commented on a change in pull request #11893: URL: https://github.com/apache/kafka/pull/11893#discussion_r828541824
########## File path: metadata/src/main/java/org/apache/kafka/controller/QuorumController.java ########## @@ -953,6 +971,48 @@ private void cancelMaybeFenceReplicas() { queue.cancelDeferred(MAYBE_FENCE_REPLICAS); } + private static final int MAX_ELECTIONS_PER_IMBALANCE = 1_000; + + private void maybeScheduleNextBalancePartitionLeaders() { + final String maybeBalancePartitionLeaders = "maybeBalancePartitionLeaders"; + + if (imbalancedScheduled != ImbalanceSchedule.SCHEDULED && + leaderImbalanceCheckIntervalNs >= 0 && + replicationControl.arePartitionLeadersImbalanced()) { + + log.debug( + "Scheduling deferred event for {} because scheduled ({}), checkIntervalNs ({}) and isImbalanced ({})", + maybeBalancePartitionLeaders, + imbalancedScheduled, + leaderImbalanceCheckIntervalNs, + replicationControl.arePartitionLeadersImbalanced() + ); + long delayNs = time.nanoseconds(); + if (imbalancedScheduled == ImbalanceSchedule.DEFERRED) { + delayNs += leaderImbalanceCheckIntervalNs; + } + scheduleDeferredWriteEvent(maybeBalancePartitionLeaders, delayNs, () -> { Review comment: Hmm. Yeah, I think that `KafkaEventQueue` is unfair if we schedule deferred events faster than we can process none deferred event. We have a similar problem with snapshot generation. Unfortunately, we can only cancel events that have been deferred. I think we need to fix this issue in `KafkaEventQueue`. I think this is beyond the scope of this PR. Do you mind if I fix this issue in a future PR? -- 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