[
https://issues.apache.org/jira/browse/KAFKA-2240?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Dong Lin resolved KAFKA-2240.
-----------------------------
Resolution: Duplicate
> AbstractFetcherThread.shutdown() should not block on
> ReadableByteChannel.read(buffer)
> -------------------------------------------------------------------------------------
>
> Key: KAFKA-2240
> URL: https://issues.apache.org/jira/browse/KAFKA-2240
> Project: Kafka
> Issue Type: Bug
> Reporter: Dong Lin
> Assignee: Dong Lin
>
> This is likely a bug from Java. This affects Kafka and here is the patch to
> fix it.
> Here is the description of the bug. By description of SocketChannel in Java 7
> Documentation. If another thread interrupts the current thread while the read
> operation is in progress, the it should closes the channel and throw
> ClosedByInterruptException. However, we find that interrupting the thread
> will not unblock the channel immediately. Instead, it waits for response or
> socket timeout before throwing an exception.
> This will cause problem in the following scenario. Suppose one
> console_consumer_1 is reading from a topic, and due to quota delay or
> whatever reason, it block on channel.read(buffer). At this moment, another
> console_consumer_2 joins and triggers rebalance at console_consumer_1. But
> consumer_1 will block waiting on the channel.read before it can release
> partition ownership, causing consumer_2 to fail after a number of failed
> attempts to obtain partition ownership.
> In other words, AbstractFetcherThread.shutdown() is not guaranteed to
> shutdown due to this bug.
> The problem is confirmed with Java 1.7 and java 1.6. To check it by yourself,
> you can use the attached server.java and client.java -- start the server
> before the client and see if client unblock after interruption.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)