THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
Code Block | ||
---|---|---|
| ||
{ "apiKey": 24, "type": "request", "name": "AddPartitionsToTxnRequest", // Version 1 is the same as version 0. // // Version 2 adds the blocking behavior and consumer group id. "validVersions": "0-2", "flexibleVersions": "none", "fields": [ { "name": "TransactionalId", "type": "string", "versions": "0+", "entityType": "transactionalId", "about": "The transactional id corresponding to the transaction."}, { "name": "ProducerId", "type": "int64", "versions": "0+", "entityType": "producerId", "about": "Current producer id in use by the transactional id." }, { "name": "ProducerEpoch", "type": "int16", "versions": "0+", "about": "Current epoch associated with the producer id." }, // -------------- START NEW FIELD -------------- { "name": "GroupId", "type": "string", "versions": "2+", "entityType": "groupId", "nullableVersions": "2+", "default": "null", "about": "The unique group identifier." } // -------------- END NEW FIELD ---------------- { "name": "Topics", "type": "[]AddPartitionsToTxnTopic", "versions": "0+", "about": "The partitions to add to the transaction.", "fields": [ { "name": "Name", "type": "string", "versions": "0+", "mapKey": true, "entityType": "topicName", "about": "The name of the topic." }, { "name": "Partitions", "type": "[]int32", "versions": "0+", "about": "The partition indexes to add to the transaction" } ]} ] } |
...
Code Block | ||
---|---|---|
| ||
{ "apiKey": 26, "type": "request", "name": "EndTxnRequest", // Version 1 is the same as version 0. // // Version 2 adds the support for new PRODUCER_FENCED error code. // // Version 3 "validVersions": "0-3", "flexibleVersions": "none", "fields": [ { "name": "TransactionalId", "type": "string", "versions": "0+", "entityType": "transactionalId", "about": "The ID of the transaction to end." }, { "name": "ProducerId", "type": "int64", "versions": "0+", "entityType": "producerId", "about": "The producer ID." }, { "name": "ProducerEpoch", "type": "int16", "versions": "0+", "about": "The current epoch associated with the producer." }, { "name": "Committed", "type": "bool", "versions": "0+", "about": "True if the transaction was committed, false if it was aborted." }, // -------------- START NEW FIELD -------------- { "name": "Topics", "type": "[]EndTxnTopic", "versions": "3+", "about": "The partitions ending up writing in current transaction.", "fields": [ { "name": "Name", "type": "string", "versions": "0+", "mapKey": true, "entityType": "topicName", "about": "The name of the topic." }, { "name": "Partitions", "type": "[]int32", "versions": "3+", "about": "The partition indexes to add to the transaction" } ]} // -------------- END NEW FIELD -------------- -- ] } |
This solution has less flexibility and especially makes the reinitialization harder, for example a re-initialized producer doesn't know what previous session looks like, so there needs to be special logic to make sure it doesn't rely on any pre-defined state which could be false. And it is harder to understand, as well.