[ 
https://issues.apache.org/jira/browse/HBASE-12684?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14259568#comment-14259568
 ] 

stack commented on HBASE-12684:
-------------------------------

I left some notes on rb but the patch is a bit older over there. Here are some 
notes on v13:

Is it possible to set a timeout on client ops?  It seems like you do as we 
currently have with the n retries going by:

{code}
        267       /**
268        * Retry to connect or close
269        *
270        * @param bootstrap      to connect with
271        * @param connectCounter amount of tries
272        * @param e              exception of fail
273        */
274       private void retryOrClose(final Bootstrap bootstrap, int 
connectCounter, Throwable e) {
275         if (connectCounter < client.maxRetries) {
276           AsyncRpcClient.WHEEL_TIMER.newTimeout(new TimerTask() {
277             @Override public void run(Timeout timeout) throws Exception {
278               connect(bootstrap);
279             }
280           }, client.failureSleep, TimeUnit.MILLISECONDS);
281         } else {
282           client.failedServers.addToFailedServers(address);
283           close(e);
284         }
285       }
{code}

Its a long-standing problem that we have had that you can't say retry for 10 
seconds and then give up.. its always been retry N times and then give up (it 
has been improving of late but as far as I know, we don't yet have cutoff at 10 
seconds implemented -- could be wrong here)

Is HBASE_CLIENT_OPERATION_TIMEOUT the global timeout?

The patch is not removing the old client because it is possible to select one 
or the other? (Can remove in another patch?)

Doing the below is convenience?

54          ByteBufInputStream in = new ByteBufInputStream(inBuffer);

Means you can copy/paste and old code will work because it is still going 
against an InputStream rather than netty ByteBuf?  Or is this an idiom?

RpcServer is doing this:

46      import java.util.*;

So is TestIPC.

FYI

How comes we are an async client but we are doing callBlockingMethod still?  
Should we be doing RpcChannel rather than BlockingRpcChannel (or is this 
something we do after we get all this in)?

Patch is excellent.  Lets get it in.  Thanks [~jurmous]





> Add new AsyncRpcClient
> ----------------------
>
>                 Key: HBASE-12684
>                 URL: https://issues.apache.org/jira/browse/HBASE-12684
>             Project: HBase
>          Issue Type: Improvement
>          Components: Client
>            Reporter: Jurriaan Mous
>            Assignee: Jurriaan Mous
>         Attachments: HBASE-12684-v1.patch, HBASE-12684-v10.patch, 
> HBASE-12684-v11.patch, HBASE-12684-v12.patch, HBASE-12684-v13.patch, 
> HBASE-12684-v2.patch, HBASE-12684-v3.patch, HBASE-12684-v4.patch, 
> HBASE-12684-v5.patch, HBASE-12684-v6.patch, HBASE-12684-v7.patch, 
> HBASE-12684-v8.patch, HBASE-12684-v9.patch, HBASE-12684.patch
>
>
> With the changes in HBASE-12597 it is possible to add new RpcClients. This 
> issue is about adding a new Async RpcClient which would enable HBase to do 
> non blocking protobuf service communication.
> Besides delivering a new AsyncRpcClient I would also like to ask the question 
> what it would take to replace the current RpcClient? This would enable to 
> simplify async code in some next issues.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to