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