[ https://issues.apache.org/jira/browse/KAFKA-5364?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16034304#comment-16034304 ]
ASF GitHub Bot commented on KAFKA-5364: --------------------------------------- Github user asfgit closed the pull request at: https://github.com/apache/kafka/pull/3202 > Producer attempts to send transactional messages before adding partitions to > transaction > ---------------------------------------------------------------------------------------- > > Key: KAFKA-5364 > URL: https://issues.apache.org/jira/browse/KAFKA-5364 > Project: Kafka > Issue Type: Sub-task > Components: clients, core, producer > Affects Versions: 0.11.0.0 > Reporter: Apurva Mehta > Assignee: Apurva Mehta > Priority: Blocker > Labels: exactly-once > Fix For: 0.11.0.0 > > > Due to a race condition between the sender thread and the producer.send(), > the following is possible: > # In KakfaProducer.doSend(), we add partitions to the transaction and then do > accumulator.append. > # In Sender.run(), we check whether there are transactional request. If there > are, we send them and wait for the response. > # If there aren't we drain the accumulator queue and send the produce > requests. > # The problem is that the sequence step 2, 1, 3 is entire possible. This > means that we won't send the 'AddPartitions' request but yet try to send the > produce data. Which results in a fatal error and requires the producer to > close. > The solution is that in the accumulator.drain, we should check again if there > are pending add partitions requests, and if so, don't drain anything. -- This message was sent by Atlassian JIRA (v6.3.15#6346)