Jason Gustafson created KAFKA-8400:
--------------------------------------
Summary: Do not update follower replica state if the log read
failed
Key: KAFKA-8400
URL: https://issues.apache.org/jira/browse/KAFKA-8400
Project: Kafka
Issue Type: Improvement
Reporter: Jason Gustafson
In {{ReplicaManager.fetchMessages}}, we have the following logic to read from
the log and update follower state:
{code}
val result = readFromLocalLog(
replicaId = replicaId,
fetchOnlyFromLeader = fetchOnlyFromLeader,
fetchIsolation = fetchIsolation,
fetchMaxBytes = fetchMaxBytes,
hardMaxBytesLimit = hardMaxBytesLimit,
readPartitionInfo = fetchInfos,
quota = quota)
if (isFromFollower) updateFollowerLogReadResults(replicaId, result)
else result
{code}
The call to {{readFromLocalLog}} could fail for many reasons, in which case we
return a LogReadResult with an error set and all fields set to -1. The problem
is that we do not check for the error when updating the follower state. As far
as I can tell, this does not cause any correctness issues, but we're just
asking for trouble. It would be better to check the error before proceeding to
`Partition.updateReplicaLogReadResult`.
Perhaps even better would be to have {{readFromLocalLog}} return something like
{{Either[LogReadResult, Errors]}} so that we are forced to handle the error.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)