Description
When we want to fence a producer using the admin client, we send an InitProducerId request.
There is logic in that API to fence (and abort) any ongoing transactions and that is what the API relies on to fence the producer. However, this handling also returns CONCURRENT_TRANSACTIONS. In normal usage, this is good because we want to actually get a new producer ID and want to retry until the the ID is supplied or we time out. https://github.com/apache/kafka/blob/5193eb93237ba9093ae444d73a1eaa2d6abcc9c1/core/src/main/scala/kafka/coordinator/transaction/TransactionCoordinator.scala#L170
https://github.com/apache/kafka/blob/a3dcbd4e28a35f79f75ec1bf316ef0b39c0df164/clients/src/main/java/org/apache/kafka/clients/producer/internals/TransactionManager.java#L1322
In the case of fence producer, we don't retry and instead we have no handling for concurrent transactions and log a message about an unexpected error.
https://github.com/apache/kafka/blob/a3dcbd4e28a35f79f75ec1bf316ef0b39c0df164/clients/src/main/java/org/apache/kafka/clients/admin/internals/FenceProducersHandler.java#L112
This is not unexpected though and the operation was successful. We should just swallow this error and treat this as a successful run of the command.
Attachments
Issue Links
- is duplicated by
-
KAFKA-14657 Admin.fenceProducers fails when Producer has ongoing transaction - but Producer gets fenced
- Closed
- links to