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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]