junrao commented on a change in pull request #9001:
URL: https://github.com/apache/kafka/pull/9001#discussion_r471806378



##########
File path: core/src/main/scala/kafka/controller/KafkaController.scala
##########
@@ -977,14 +1179,30 @@ class KafkaController(val config: KafkaConfig,
 
   /**
    * Send the leader information for selected partitions to selected brokers 
so that they can correctly respond to
-   * metadata requests
+   * metadata requests. Particularly, when feature versioning is enabled, we 
filter out brokers with incompatible
+   * features from receiving the metadata requests. This is because we do not 
want to activate incompatible brokers,
+   * as these may have harmful consequences to the cluster.

Review comment:
       My understanding of the race condition is that the controller finalizes 
a feature while there is a pending broker registration in the controller event 
queue. When the controller starts to process the new broker registration, it 
will realize that its supported feature is not compatible. Here, it's seems 
that we will still process this new broker registration and only avoid sending 
UpdatateMetadataRequest to it. I am not sure if this helps since we already 
acted on this incompatible broker registration and some damage may already be 
done. The same UpdatateMetadataRequest will still be sent to other brokers and 
its metadata will be available to the clients.
   
   An alternative way is to just skip the handling of new broker registration 
if it's detected as incompatible.




----------------------------------------------------------------
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.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Reply via email to