[ https://issues.apache.org/jira/browse/RATIS-113?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16248829#comment-16248829 ]
Lokesh Jain edited comment on RATIS-113 at 11/12/17 11:50 AM: -------------------------------------------------------------- Thanks for the review [~szetszwo]. v3 patch addresses the above comments. I have removed the implementation for configuration and used semaphore instead of ArrayBlockingQueue. getCause() in RaftClientRpc#sendRequestAsync is a requirement as Hadoop Rpc throws Remote exception. And code logic in RaftClientImpl#sendRequestAsync checks the exception class. {code:java} if (cause instanceof RaftException) { return new RaftClientReply(request, (RaftException) cause); } else if (cause instanceof IOException) { handleIOException(request, (IOException) cause, null); } {code} The send api throws StateMachineException and GroupMismatchException as in RaftClientImpl#sendRequest. {code:java} try { reply = clientRpc.sendRequest(request); } catch (GroupMismatchException gme) { throw gme; {code} and {code:java} } else if (reply.hasStateMachineException()) { throw reply.getStateMachineException(); {code} Therefore I have changed the logic of sendAsync to complete exceptionally in case of StateMachineException and GroupMismatchException. was (Author: ljain): Thanks for the review [~szetszwo]. v3 patch addresses the above comments. I have removed the implementation for configuration and used semaphore instead of ArrayBlockingQueue. RaftClientRpc#sendRequestAsync is a requirement as Hadoop Rpc throws Remote exception. And code logic in RaftClientImpl#sendRequestAsync checks the exception class. {code:java} if (cause instanceof RaftException) { return new RaftClientReply(request, (RaftException) cause); } else if (cause instanceof IOException) { handleIOException(request, (IOException) cause, null); } {code} The send api throws StateMachineException and GroupMismatchException as in RaftClientImpl#sendRequest. {code:java} try { reply = clientRpc.sendRequest(request); } catch (GroupMismatchException gme) { throw gme; {code} and {code:java} } else if (reply.hasStateMachineException()) { throw reply.getStateMachineException(); {code} Therefore I have changed the logic of sendAsync to complete exceptionally in case of StateMachineException and GroupMismatchException. > Add Async send interface to RaftClient > -------------------------------------- > > Key: RATIS-113 > URL: https://issues.apache.org/jira/browse/RATIS-113 > Project: Ratis > Issue Type: Bug > Reporter: Mukul Kumar Singh > Assignee: Lokesh Jain > Attachments: RATIS-113.001.patch, RATIS-113.002.patch, > RATIS-113.003.patch > > > Raft Client currently only has a sync interface, an sync interface is needed > for ozone -- This message was sent by Atlassian JIRA (v6.4.14#64029)