You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@kafka.apache.org by "Jose Armando Garcia Sancio (Jira)" <ji...@apache.org> on 2021/02/17 03:29:00 UTC

[jira] [Created] (KAFKA-12331) KafkaRaftClient should use the LEO when appending LeaderChangeMessage

Jose Armando Garcia Sancio created KAFKA-12331:
--------------------------------------------------

             Summary: KafkaRaftClient should use the LEO when appending LeaderChangeMessage
                 Key: KAFKA-12331
                 URL: https://issues.apache.org/jira/browse/KAFKA-12331
             Project: Kafka
          Issue Type: Sub-task
          Components: replication
            Reporter: Jose Armando Garcia Sancio


KafkaMetadataLog's appendAsLeader expects the base offset to match the LEO. This is enforced when KafkaRaftClient uses the BatchAccumulator to create batches. When creating the control batch for the LeaderChangeMessage the KafkaRaftClient doesn't use the BatchAccumulator and instead creates the batch with the default base offset of 0.

This causes the validation in KafkaMetadataLog to fail with the following exception:
{code:java}
kafka.common.UnexpectedAppendOffsetException: Unexpected offset in append to @metadata-0. First offset 0 is less than the next offset 5. First 10 offsets in append: ArrayBuffer(0), last offset in append: 0. Log start offset = 0
	at kafka.log.Log.append(Log.scala:1217)
	at kafka.log.Log.appendAsLeader(Log.scala:1092)
	at kafka.raft.KafkaMetadataLog.appendAsLeader(KafkaMetadataLog.scala:92)
	at org.apache.kafka.raft.KafkaRaftClient.appendAsLeader(KafkaRaftClient.java:1158)
	at org.apache.kafka.raft.KafkaRaftClient.appendLeaderChangeMessage(KafkaRaftClient.java:449)
	at org.apache.kafka.raft.KafkaRaftClient.onBecomeLeader(KafkaRaftClient.java:409)
	at org.apache.kafka.raft.KafkaRaftClient.maybeTransitionToLeader(KafkaRaftClient.java:463)
	at org.apache.kafka.raft.KafkaRaftClient.handleVoteResponse(KafkaRaftClient.java:663)
	at org.apache.kafka.raft.KafkaRaftClient.handleResponse(KafkaRaftClient.java:1530)
	at org.apache.kafka.raft.KafkaRaftClient.handleInboundMessage(KafkaRaftClient.java:1652)
	at org.apache.kafka.raft.KafkaRaftClient.poll(KafkaRaftClient.java:2183)
	at kafka.raft.KafkaRaftManager$RaftIoThread.doWork(RaftManager.scala:52)
	at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:96) {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)