[ https://issues.apache.org/jira/browse/KAFKA-8400?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jason Gustafson resolved KAFKA-8400. ------------------------------------ Resolution: Fixed Fix Version/s: 2.4.0 > 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 > Fix For: 2.4.0 > > > 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)