You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@kafka.apache.org by "David Jacot (Jira)" <ji...@apache.org> on 2023/04/06 07:19:00 UTC

[jira] [Resolved] (KAFKA-14880) TransactionMetadata with producer epoch -1 should be expirable

     [ https://issues.apache.org/jira/browse/KAFKA-14880?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

David Jacot resolved KAFKA-14880.
---------------------------------
    Fix Version/s: 3.2.4
                   3.1.3
                   3.0.3
                   3.4.1
                   3.3.3
       Resolution: Fixed

> TransactionMetadata with producer epoch -1 should be expirable 
> ---------------------------------------------------------------
>
>                 Key: KAFKA-14880
>                 URL: https://issues.apache.org/jira/browse/KAFKA-14880
>             Project: Kafka
>          Issue Type: Bug
>    Affects Versions: 3.1.0, 3.0.0, 3.2.0, 3.3.0, 3.4.0
>            Reporter: David Jacot
>            Assignee: David Jacot
>            Priority: Major
>             Fix For: 3.2.4, 3.1.3, 3.0.3, 3.4.1, 3.3.3
>
>
> We have seen the following error in logs:
> {noformat}
> "Mar 22, 2019 @ 21:57:56.655",Error,"kafka-0-0","transaction-log-manager-0","Uncaught exception in scheduled task 'transactionalId-expiration'","java.lang.IllegalArgumentException: Illegal new producer epoch -1
> {noformat}
> Investigations showed that it is actually possible for a transaction metadata object to still have -1 as producer epoch when it transitions to Dead.
> When a transaction metadata is created for the first time (in handleInitProducerId), it has -1 as its producer epoch. Then a producer epoch is attributed and the transaction coordinator tries to persist the change. If the write fail for instance because there is an under min isr, the transaction metadata remains with its epoch as -1 forever or until the init producer id is retried.
> This means that it is possible for transaction metadata to remain with -1 as producer epoch until it gets expired. At the moment, this is not allowed because we enforce a producer epoch greater or equals to 0 in prepareTransitionTo.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)