CalvinConfluent commented on code in PR #16840:
URL: https://github.com/apache/kafka/pull/16840#discussion_r1719070513


##########
clients/src/main/java/org/apache/kafka/clients/producer/internals/TransactionManager.java:
##########
@@ -980,6 +998,49 @@ void handleCoordinatorReady() {
                 null;
         this.coordinatorSupportsBumpingEpoch = initProducerIdVersion != null &&
                 initProducerIdVersion.maxVersion() >= 3;
+
+        if (nodeApiVersions == null) return;
+
+        if (nodeApiVersions.supportedFeatures() != null) {
+            /*
+                To enable the transaction V2, it requires:
+                1. transaction.version max version >= 2
+                2. The ProduceRequest max version > 
ProducerRequest.LAST_BEFORE_TRANSACTION_V2_VERSION
+                3. The TxnOffsetCommitRequest max version > 
TxnOffsetCommitRequest.LAST_BEFORE_TRANSACTION_V2_VERSION
+            */
+            ApiVersion produceVersion = 
nodeApiVersions.apiVersion(ApiKeys.PRODUCE);
+            ApiVersion txnOffsetCommitVersion = 
nodeApiVersions.apiVersion(ApiKeys.TXN_OFFSET_COMMIT);
+            SupportedVersionRange transactionVersion = 
nodeApiVersions.supportedFeatures().get("transaction.version");
+            if (produceVersion != null &&
+                    produceVersion.maxVersion() > 
ProduceRequest.LAST_BEFORE_TRANSACTION_V2_VERSION &&
+                    txnOffsetCommitVersion != null &&
+                    txnOffsetCommitVersion.maxVersion() > 
TxnOffsetCommitRequest.LAST_BEFORE_TRANSACTION_V2_VERSION &&
+                    transactionVersion != null &&
+                    transactionVersion.max() >= (short) 2) {
+                this.coordinatorSupportsTransactionV2 = true;
+                return;
+            }
+        }
+        // Now, the broker does not support transaction V2. Let's downgrade 
the Produce and TxnOffsetCommitRequest
+        // max versions.
+        downgradeApiVersionsIfNotUsingTransactionV2();
+    }
+
+    // Set the ProducerRequest and TxnOffsetCommitRequest versions at their 
LAST_BEFORE_TRANSACTION_V2_VERSION.
+    private void downgradeApiVersionsIfNotUsingTransactionV2() {
+        NodeApiVersions nodeApiVersions = transactionCoordinator != null ?
+            apiVersions.get(transactionCoordinator.idString()) :
+            null;
+        if (nodeApiVersions == null) return;
+        if (nodeApiVersions.apiVersion(ApiKeys.PRODUCE) != null &&
+            nodeApiVersions.apiVersion(ApiKeys.PRODUCE).maxVersion() > 
ProduceRequest.LAST_BEFORE_TRANSACTION_V2_VERSION) {
+            
nodeApiVersions.apiVersion(ApiKeys.PRODUCE).setMaxVersion(ProduceRequest.LAST_BEFORE_TRANSACTION_V2_VERSION);

Review Comment:
   Removed the version update.



##########
clients/src/main/java/org/apache/kafka/clients/producer/internals/TransactionManager.java:
##########
@@ -1091,7 +1152,8 @@ private TxnRequestHandler 
addPartitionsToTransactionHandler() {
 
     private TxnOffsetCommitHandler 
txnOffsetCommitHandler(TransactionalRequestResult result,
                                                           Map<TopicPartition, 
OffsetAndMetadata> offsets,
-                                                          
ConsumerGroupMetadata groupMetadata) {
+                                                          
ConsumerGroupMetadata groupMetadata,

Review Comment:
   Done.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to