kafka-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jason Gustafson (JIRA)" <j...@apache.org>
Subject [jira] [Resolved] (KAFKA-8400) Do not update follower replica state if the log read failed
Date Wed, 05 Jun 2019 21:38:00 GMT

     [ 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)

Mime
View raw message