José Armando García Sancio created KAFKA-18385:
--------------------------------------------------
Summary: maybeHandleCommonResponse doesn't seem to handle all cases
Key: KAFKA-18385
URL: https://issues.apache.org/jira/browse/KAFKA-18385
Project: Kafka
Issue Type: Sub-task
Components: kraft
Reporter: José Armando García Sancio
Assignee: José Armando García Sancio
It is possible for a replica to know the leader id but not the leader's
endpoint. This can happen when the replica restart and the voter set that
includes the leader has not bee replicated in the log.
In this case the replica will start as unattached with a leader id. In
unattached it will send FETCH request to the bootstrap servers until a
bootstrap server provides the leader id and leader's endpoint in the FETCH
response.
This response is supposed to be handled by maybeHandleCommonResponse but this
logic doesn't seem correct:
{code:java}
} else if (epoch == quorum.epoch()
&& leaderId.isPresent()
&& !quorum.hasLeader()) { // Since we are
transitioning to Follower, we will only forward the
// request to the handler if there is no error. Otherwise, we
will let
// the request be retried immediately (if needed) after the
transition.
// This handling allows an observer to discover the leader and
append
// to the log in the same Fetch request.
transitionToFollower(epoch, leaderId.getAsInt(), leaderEndpoints,
currentTimeMs);
if (error == Errors.NONE) {
return Optional.empty();
} else {
return Optional.of(value: true);
}
} {code}
One possible fix is to check if the locally known leader endpoints is empty in
the predicate for the if expression.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)