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)

Reply via email to