[
https://issues.apache.org/jira/browse/KAFKA-8400?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jason Gustafson reassigned KAFKA-8400:
--------------------------------------
Assignee: Jason Gustafson
> 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
> Assignee: Jason Gustafson
> Priority: Major
>
> 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)