Skip to content

KAFKA-8286; Leader Election Admin RPC (KIP-460)#6686

Merged
hachikuji merged 35 commits into
apache:trunkfrom
jsancio:election-rpc
May 29, 2019
Merged

KAFKA-8286; Leader Election Admin RPC (KIP-460)#6686
hachikuji merged 35 commits into
apache:trunkfrom
jsancio:election-rpc

Conversation

@jsancio

@jsancio jsancio commented May 6, 2019

Copy link
Copy Markdown
Member

Implements KIP-460: https://cwiki.apache.org/confluence/display/KAFKA/KIP-460%3A+Admin+Leader+Election+RPC

Pending:

  1. Implement additional tests
  2. Improve documentation

Committer Checklist (excluded from commit message)

  • Verify design and implementation
  • Verify test coverage and CI build status
  • Verify documentation (including upgrade notes)

@jsancio

jsancio commented May 13, 2019

Copy link
Copy Markdown
Member Author

cc @hachikuji @mumrah @junrao

@hachikuji hachikuji left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the patch. Left a few initial comments.

Comment thread clients/src/main/java/org/apache/kafka/common/protocol/Errors.java Outdated
Comment thread clients/src/main/java/org/apache/kafka/clients/admin/AdminClient.java Outdated
Comment thread clients/src/main/java/org/apache/kafka/clients/admin/ElectLeadersOptions.java Outdated
Comment thread clients/src/main/java/org/apache/kafka/clients/admin/ElectLeadersResult.java Outdated
Comment thread clients/src/main/java/org/apache/kafka/clients/admin/ElectLeadersResult.java Outdated
Comment thread clients/src/main/java/org/apache/kafka/clients/admin/ElectLeadersResult.java Outdated
Comment thread clients/src/main/java/org/apache/kafka/clients/admin/ElectLeadersResult.java Outdated
Comment thread clients/src/main/java/org/apache/kafka/clients/admin/KafkaAdminClient.java Outdated

@jsancio jsancio left a comment

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the feedback. I'll address your comments today.

Regarding the server/controller side of the changes feel free to take a glance but hold off on a detail review. I found a major issue with the implementation that I have addressed and I am in the process of cleaning up.

cc @mumrah

Comment thread clients/src/main/java/org/apache/kafka/common/protocol/Errors.java Outdated
Comment thread clients/src/main/java/org/apache/kafka/clients/admin/AdminClient.java Outdated
Comment thread clients/src/main/java/org/apache/kafka/clients/admin/ElectLeadersResult.java Outdated
Comment thread clients/src/main/java/org/apache/kafka/clients/admin/KafkaAdminClient.java Outdated

@hachikuji hachikuji left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a few more comments. The controller changes look pretty clean.

Comment thread core/src/main/scala/kafka/admin/PreferredReplicaLeaderElectionCommand.scala Outdated
Comment thread core/src/main/scala/kafka/admin/LeaderElectionCommand.scala Outdated
Comment thread core/src/main/scala/kafka/admin/LeaderElectionCommand.scala Outdated
Comment thread core/src/main/scala/kafka/admin/LeaderElectionCommand.scala
Comment thread core/src/main/scala/kafka/admin/LeaderElectionCommand.scala Outdated
Comment thread core/src/main/scala/kafka/admin/LeaderElectionCommand.scala Outdated
Comment thread core/src/main/scala/kafka/controller/KafkaController.scala Outdated
Comment thread core/src/main/scala/kafka/controller/KafkaController.scala Outdated
Comment thread core/src/main/scala/kafka/controller/KafkaController.scala Outdated
Comment thread core/src/main/scala/kafka/server/KafkaApis.scala Outdated
Comment thread clients/src/main/java/org/apache/kafka/common/requests/ElectLeadersRequest.java Outdated

@junrao junrao left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jsancio : Thanks for the PR. Made a pass of all the server side files. A few comments below.

Comment thread core/src/main/scala/kafka/controller/KafkaController.scala Outdated
Comment thread core/src/main/scala/kafka/controller/KafkaController.scala Outdated
Comment thread core/src/main/scala/kafka/server/ReplicaManager.scala
Comment thread core/src/main/scala/kafka/controller/PartitionStateMachine.scala Outdated
Comment thread core/src/main/scala/kafka/controller/PartitionStateMachine.scala Outdated
Comment thread core/src/main/scala/kafka/controller/PartitionStateMachine.scala Outdated
Comment thread core/src/main/scala/kafka/api/package.scala
Comment thread core/src/test/scala/unit/kafka/controller/PartitionStateMachineTest.scala Outdated
Comment thread core/src/test/scala/unit/kafka/controller/PartitionStateMachineTest.scala Outdated
Comment thread core/src/test/scala/unit/kafka/controller/PartitionStateMachineTest.scala Outdated
Comment thread clients/src/main/java/org/apache/kafka/common/ElectionType.java
Comment thread clients/src/main/java/org/apache/kafka/common/protocol/ApiKeys.java
Comment thread core/src/main/scala/kafka/admin/PreferredReplicaLeaderElectionCommand.scala Outdated
Comment thread core/src/main/scala/kafka/controller/KafkaController.scala
Comment thread core/src/main/scala/kafka/controller/KafkaController.scala Outdated
Comment thread core/src/main/scala/kafka/controller/KafkaController.scala Outdated

@hachikuji hachikuji left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Did another pass over the client-side changes. Will look at the server stuff next.

Comment thread clients/src/main/java/org/apache/kafka/common/requests/ElectLeadersRequest.java Outdated
Comment thread clients/src/main/java/org/apache/kafka/common/requests/ElectLeadersRequest.java Outdated
Comment thread clients/src/main/java/org/apache/kafka/common/requests/ElectLeadersRequest.java Outdated
Comment thread clients/src/main/java/org/apache/kafka/common/requests/ElectLeadersResponse.java Outdated
Comment thread clients/src/main/java/org/apache/kafka/common/requests/ElectLeadersResponse.java Outdated
Comment thread clients/src/main/resources/common/message/ElectLeadersResponse.json
Comment thread clients/src/main/java/org/apache/kafka/clients/admin/KafkaAdminClient.java Outdated
@hachikuji

Copy link
Copy Markdown
Contributor

In terms of error handling, I think these are the main cases:

  1. Broker is not the controller => CONTROLLER_MOVED
  2. Broker's zk write is fenced by another controller => Not 100% sure, but this raises a StateChangeFailedException which seems to get mapped to ELIGIBLE_LEADERS_NOT_AVAILABLE. Maybe this should be CONTROLLER_MOVED also?
  3. Unclean/preferred election not needed => I was having trouble tracking this down, but I don't think we have a separate error code, so maybe it's ELIGIBLE_LEADERS_NOT_AVAILABLE? Should we have a new error code, maybe ELECTION_NOT_NEEDED?
  4. Unclean/preferred election not possible => ELIGIBLE_LEADERS_NOT_AVAILBLE
  5. Election succeeded => NONE

Just want to check high level if there are any additional cases to check for and if we agree from an API perspective on how they should be handled.

Do not assume that if the admin client receives an empty set of
partitions when it did not provide any partitions that it means that we
had a cluster authoriazation error.
@jsancio

jsancio commented May 17, 2019

Copy link
Copy Markdown
Member Author

In terms of error handling, I think these are the main cases:

1. Broker is not the controller => CONTROLLER_MOVED

2. Broker's zk write is fenced by another controller => Not 100% sure, but this raises a StateChangeFailedException which seems to get mapped to ELIGIBLE_LEADERS_NOT_AVAILABLE. Maybe this should be CONTROLLER_MOVED also?

3. Unclean/preferred election not needed => I was having trouble tracking this down, but I don't think we have a separate error code, so maybe it's ELIGIBLE_LEADERS_NOT_AVAILABLE? Should we have a new error code, maybe ELECTION_NOT_NEEDED?

4. Unclean/preferred election not possible => ELIGIBLE_LEADERS_NOT_AVAILBLE

5. Election succeeded => NONE

Just want to check high level if there are any additional cases to check for and if we agree from an API perspective on how they should be handled.

I filled the following issues. I will be working on them right after this PR.

  1. https://issues.apache.org/jira/browse/KAFKA-8385
  2. https://issues.apache.org/jira/browse/KAFKA-8384
  3. https://issues.apache.org/jira/browse/KAFKA-8383

@jsancio jsancio changed the title [WIP] KIP-460 Leader Election Admin RPC KIP-460 Leader Election Admin RPC May 21, 2019
@jsancio
jsancio marked this pull request as ready for review May 21, 2019 00:19

@hachikuji hachikuji left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the updates. Looking good overall. It would be nice to see some integration/system tests.

Comment thread core/src/main/scala/kafka/api/package.scala Outdated
Comment thread core/src/main/scala/kafka/server/ReplicaManager.scala
Comment thread core/src/main/scala/kafka/controller/KafkaController.scala Outdated
Comment thread core/src/main/scala/kafka/controller/KafkaController.scala Outdated
Comment thread core/src/main/scala/kafka/controller/KafkaController.scala
Comment thread core/src/main/scala/kafka/controller/KafkaController.scala Outdated
Comment thread core/src/main/scala/kafka/controller/KafkaController.scala Outdated
jsancio added 3 commits May 22, 2019 11:14
When the requesting elections for all of the topic partitions, do not
return topic partitions that didn't need to change leader.

@hachikuji hachikuji left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the updates. Left some more comments.

Comment thread clients/src/main/java/org/apache/kafka/common/requests/ElectLeadersResponse.java Outdated
Comment thread clients/src/main/java/org/apache/kafka/clients/admin/KafkaAdminClient.java Outdated
Comment thread core/src/main/scala/kafka/admin/LeaderElectionCommand.scala Outdated
Comment thread core/src/main/scala/kafka/admin/LeaderElectionCommand.scala Outdated
Comment thread core/src/main/scala/kafka/admin/LeaderElectionCommand.scala Outdated
Comment thread core/src/main/scala/kafka/server/KafkaApis.scala
Comment thread core/src/main/scala/kafka/server/DelayedElectLeader.scala
Comment thread core/src/main/scala/kafka/server/ReplicaManager.scala Outdated
Comment thread core/src/main/scala/kafka/server/ReplicaManager.scala Outdated
Comment thread core/src/main/scala/kafka/server/ReplicaManager.scala Outdated
@hachikuji hachikuji mentioned this pull request May 24, 2019
3 tasks
@jsancio

jsancio commented May 24, 2019

Copy link
Copy Markdown
Member Author

retest this please

1 similar comment
@ijuma

ijuma commented May 28, 2019

Copy link
Copy Markdown
Member

retest this please

@jsancio

jsancio commented May 28, 2019

Copy link
Copy Markdown
Member Author

retest this please

@hachikuji hachikuji changed the title KIP-460 Leader Election Admin RPC KAFKA-8286; Leader Election Admin RPC (KIP-460) May 28, 2019

@hachikuji hachikuji left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the patch! LGTM.

@jsancio

jsancio commented May 29, 2019

Copy link
Copy Markdown
Member Author

JDK 8 and Scala 2.11 passes. There is one failure in JDK 11 and Scala 2.12

kafka.integration.UncleanLeaderElectionTest.testUncleanLeaderElectionDisabled

@jsancio

jsancio commented May 29, 2019

Copy link
Copy Markdown
Member Author

retest this please

@hachikuji
hachikuji merged commit 121308c into apache:trunk May 29, 2019
@jsancio
jsancio deleted the election-rpc branch May 29, 2019 18:57
pengxiaolong pushed a commit to pengxiaolong/kafka that referenced this pull request Jun 14, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants