[ https://issues.apache.org/jira/browse/KAFKA-2672?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14965331#comment-14965331 ]
Ismael Juma edited comment on KAFKA-2672 at 10/20/15 4:22 PM: -------------------------------------------------------------- [~junrao], that is right. As far as I can see, it does not: {code} private boolean trySend(long now) { // send any requests that can be sent now boolean requestsSent = false; for (Map.Entry<Node, List<ClientRequest>> requestEntry: unsent.entrySet()) { Node node = requestEntry.getKey(); Iterator<ClientRequest> iterator = requestEntry.getValue().iterator(); while (iterator.hasNext()) { ClientRequest request = iterator.next(); if (client.ready(node, now)) { client.send(request, now); iterator.remove(); requestsSent = true; } else if (client.connectionFailed(node)) { RequestFutureCompletionHandler handler = (RequestFutureCompletionHandler) request.callback(); handler.onComplete(new ClientResponse(request, now, true, null)); iterator.remove(); } } } return requestsSent; } {code} The log entry that Rajini quoted is triggered by an exception raised in `clearUnsentRequests`: {code} private void clearUnsentRequests(long now) { // clear all unsent requests and fail their corresponding futures for (Map.Entry<Node, List<ClientRequest>> requestEntry: unsent.entrySet()) { Iterator<ClientRequest> iterator = requestEntry.getValue().iterator(); while (iterator.hasNext()) { ClientRequest request = iterator.next(); RequestFutureCompletionHandler handler = (RequestFutureCompletionHandler) request.callback(); handler.raise(SendFailedException.INSTANCE); iterator.remove(); } } unsent.clear(); } {code} In my original comment, I showed that `clearUnsentRequests` is called before `ConsumerNetworkClient.poll` returns. I haven't investigated in detail, but it sounds like the handshake takes longer to complete than `poll` and hence the log output. I was hoping that Jason would confirm or clarify this. :) was (Author: ijuma): [~junrao], that is right. As far as I can see, it does not: {code} private boolean trySend(long now) { // send any requests that can be sent now boolean requestsSent = false; for (Map.Entry<Node, List<ClientRequest>> requestEntry: unsent.entrySet()) { Node node = requestEntry.getKey(); Iterator<ClientRequest> iterator = requestEntry.getValue().iterator(); while (iterator.hasNext()) { ClientRequest request = iterator.next(); if (client.ready(node, now)) { client.send(request, now); iterator.remove(); requestsSent = true; } else if (client.connectionFailed(node)) { RequestFutureCompletionHandler handler = (RequestFutureCompletionHandler) request.callback(); handler.onComplete(new ClientResponse(request, now, true, null)); iterator.remove(); } } } return requestsSent; } {code} The log entry that Rajini quoted happens in `clearUnsentRequests`: {code} private void clearUnsentRequests(long now) { // clear all unsent requests and fail their corresponding futures for (Map.Entry<Node, List<ClientRequest>> requestEntry: unsent.entrySet()) { Iterator<ClientRequest> iterator = requestEntry.getValue().iterator(); while (iterator.hasNext()) { ClientRequest request = iterator.next(); RequestFutureCompletionHandler handler = (RequestFutureCompletionHandler) request.callback(); handler.raise(SendFailedException.INSTANCE); iterator.remove(); } } unsent.clear(); } {code} In my original comment, I showed that `clearUnsentRequests` is called before `ConsumerNetworkClient.poll` returns. I haven't investigated in detail, but it sounds like the handshake takes longer to complete than `poll` and hence the log output. I was hoping that Jason would confirm or clarify this. :) > SendFailedException when new consumer is run with SSL > ----------------------------------------------------- > > Key: KAFKA-2672 > URL: https://issues.apache.org/jira/browse/KAFKA-2672 > Project: Kafka > Issue Type: Bug > Components: consumer > Reporter: Rajini Sivaram > Assignee: Neha Narkhede > Fix For: 0.9.0.0 > > > When running new consumer with SSL, debug logs show these exceptions every > time: > {quote} > [2015-10-19 20:57:43,389] DEBUG Fetch failed > (org.apache.kafka.clients.consumer.internals.Fetcher) > org.apache.kafka.clients.consumer.internals.SendFailedException > {quote} > The exception occurs because send is queued before SSL handshake is > complete. I am not sure if the exception is harmless, but it will be good to > avoid the exception either way since it feels like an exception that exists > to handle edge cases like buffer overflow rather than something in a normal > code path. -- This message was sent by Atlassian JIRA (v6.3.4#6332)