You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@kafka.apache.org by "Jason Gustafson (JIRA)" <ji...@apache.org> on 2019/05/21 02:13:00 UTC

[jira] [Created] (KAFKA-8400) Do not update follower replica state if the log read failed

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)