[
https://issues.apache.org/jira/browse/KAFKA-5364?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16036140#comment-16036140
]
ASF GitHub Bot commented on KAFKA-5364:
---------------------------------------
GitHub user hachikuji opened a pull request:
https://github.com/apache/kafka/pull/3231
KAFKA-5364: ensurePartitionAdded does not handle pending partitions in
abortable error state
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/hachikuji/kafka KAFKA-5364
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/kafka/pull/3231.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #3231
----
commit 7e65cf7e4642e8dca29a02321e29e4701a1712ba
Author: Jason Gustafson <[email protected]>
Date: 2017-06-04T01:26:51Z
KAFKA-5364: ensurePartitionAdded does not handle pending partitions in
abortable error state
----
> 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
>
> Attachments: KAFKA-5364.tar.gz
>
>
> 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)