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

Bill Bejeck updated KAFKA-20739:
--------------------------------
    Fix Version/s: 4.4.0
                       (was: 4.3.1)

> Transaction coordinator rejects InitProducerId v6 recovery with 
> KeepPreparedTxn=true
> ------------------------------------------------------------------------------------
>
>                 Key: KAFKA-20739
>                 URL: https://issues.apache.org/jira/browse/KAFKA-20739
>             Project: Kafka
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 4.2.1
>            Reporter: Shekhar Prasad Rajak
>            Assignee: Shekhar Prasad Rajak
>            Priority: Major
>             Fix For: 4.4.0
>
>
> InitProducerId v6 defines KeepPreparedTxn, OngoingTxnProducerId, and 
> OngoingTxnProducerEpoch for 2PC recovery. Even when InitProducerId v6 is 
> forced directly and broker-side 2PC is enabled, the transaction
>   coordinator rejects keepPreparedTxn=true with UNSUPPORTED_VERSION.
>   Example:
>   InitProducerIdRequestData data = new InitProducerIdRequestData()
>       .setTransactionalId("txn-2pc")
>       .setTransactionTimeoutMs(10)
>       .setProducerId(RecordBatch.NO_PRODUCER_ID)
>       .setProducerEpoch(RecordBatch.NO_PRODUCER_EPOCH)
>       .setEnable2Pc(true)
>       .setKeepPreparedTxn(true);
>   InitProducerIdRequest request =
>       new InitProducerIdRequest.Builder(data).build((short) 6);
>   Current behavior:
>   errorCode = 35
>   35 is Errors.UNSUPPORTED_VERSION.
>   Flow:
>   InitProducerId v6 request
>     -> KafkaApis.handleInitProducerIdRequest()
>     -> TransactionCoordinator.handleInitProducerId()
>     -> keepPreparedTxn == true
>     -> returns Errors.UNSUPPORTED_VERSION
>   Expected behavior:
>   With broker config transaction.two.phase.commit.enable=true, 
> keepPreparedTxn=true should be accepted when enable2Pc=true.
>   If there is no ongoing 2PC transaction:
>   error = NONE
>   ongoingTxnProducerId = -1
>   ongoingTxnProducerEpoch = -1
>   If there is an ongoing 2PC transaction:
>   error = NONE
>   broker preserves the ongoing transaction
>   response includes ongoingTxnProducerId / ongoingTxnProducerEpoch
>   client enters PREPARED_TRANSACTION
>   completeTransaction(preparedTxnState) can finalize it
>  
>  
>   Expected broker/client state flow:
>   Client:  READY -> IN_TRANSACTION -> PREPARED_TRANSACTION
>   Broker:  EMPTY -> ONGOING 2PC transaction
>   Crash/restart
>   Client:  initTransactions(true)
>   Broker:  returns ongoing producer id/epoch
>   Client:  PREPARED_TRANSACTION
>   Client:  completeTransaction(preparedState)
>   Broker:  PREPARE_COMMIT -> COMPLETE_COMMIT
>  



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

Reply via email to