[ 
https://issues.apache.org/jira/browse/KAFKA-10504?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17204800#comment-17204800
 ] 

HaiyuanZhao commented on KAFKA-10504:
-------------------------------------

>From my understanding yes. 

```
{{ }}{{* @throws TransactionTimedOutException if the producer has encountered a 
previously aborted transaction on coordinator side.}}
{{ }}{{*         Application should catch it and retry starting another 
transaction in this case.}}
```

As quoted above, when the producer {{encountered an }}{{aborted transaction on 
coordinator side}}{{. The Application should retry another transaction.}}

However the client side transaction state can't transit from READY to 
INITIALIZING directly by calling initProducerId. So if client received a 
TRANSACTIONT_TIME_OUT error, it has to transit to ABORTING_TRANSACTION first by 
calling abort.

The problem is that the client will also receive TRANSACTIONT_TIME_OUT error by 
calling abort which enters an endless loop.

My solution refers to the idea of 8805. If the last error is an 
TRANSACTIONT_TIME_OUT error, Calling abort will skip directly to InitProduceId.

> It will not work to skip to InitProducerId as lastError is always null
> ----------------------------------------------------------------------
>
>                 Key: KAFKA-10504
>                 URL: https://issues.apache.org/jira/browse/KAFKA-10504
>             Project: Kafka
>          Issue Type: Improvement
>          Components: clients
>            Reporter: HaiyuanZhao
>            Assignee: HaiyuanZhao
>            Priority: Major
>   Original Estimate: 12h
>  Remaining Estimate: 12h
>
> Kafka-8805 introduced an optimization for txn abort process: If the last 
> error is an INVALID_PRODUCER_ID_MAPPING error, skip directly to InitProduceId.
> However this optimization will not work as the var lastError is always null. 
> Because the txn state will transit to ABORTING_TRANSACTION from 
> ABORTABLE_ERROR when beginAbort is called, and the lastError will updated to 
> null.
> So then EndTxn is always called before InitProduceId.
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to