Jason Gustafson created KAFKA-2217:
--------------------------------------
Summary: Refactor Client Selectable Interface for Better
Concurrency Options
Key: KAFKA-2217
URL: https://issues.apache.org/jira/browse/KAFKA-2217
Project: Kafka
Issue Type: Improvement
Reporter: Jason Gustafson
Assignee: Jason Gustafson
The current Selectable interface makes thread-safe usage without external
locking unlikely. In particular, the interface requires implementations to
store internal lists containing the results from an invocation of poll. This
makes dealing with issues such as KAFKA-2168 more difficult since it adds state
which must be synchronized. Here are the offending methods:
{code:java}
interface Selectable {
void poll(long timeout);
List<NetworkSend> completedSends();
List<NetworkReceive> completedReceives();
List<Integer> disconnected();
List<Integer> connected();
// rest excluded
}
{code}
The user is required to invoke poll, then extract the results from the
corresponding methods. In order to avoid missing events, the caller must hold
an external lock while they access the results of the poll.
Instead, we can return the results directly from poll call using a container
class. For example:
{code:java}
class PollResult {
List<NetworkSend> completedSends;
List<NetworkReceive> completedReceives;
List<Integer> disconnected;
List<Integer> connected;
}
interface Selectable {
PollResult poll(long timeout);
}
{code}
This should get us closer to a thread-safe NetworkClient, which would enable a
more granular approach to synchronizing the KafkaConsumer.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)