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

ryan rawson commented on HBASE-3523:
------------------------------------

Things that are issues:

- the use of proxy means that the interfaces _must have_ InterruptedException 
on the interface, or else you get "undeclared throwable exception", but now you 
are conflating a business contract (the interfaces) and networking/execution 
realities. Futhermore going through a proxy object isn't necessary, its just 
more layers, since few people directly code against the interfaces.
- multiple level of timeouts causes unnecessary confusion. Also the retry loops 
in HCM cause confusion and issues.
- client should support parallelism more directly, no more thread pools that 
just sleep!
- lots of callables make the code harder to read, either get rid of them or use 
more inner classes. Jumping around files makes for difficult comprehension.

Some good things:
- the base socket handling is actually in good shape. 1 socket per client-rs 
pair is about where we want to be.
- multiplexing requests on the same socket is good, not spawning extra threads 
server side just to handle more clients is also good. since every client will 
have an open socket to at least the META region, this is very important!
- the handler pool is a natural side effect of the previous point, unbounding 
it might not be a good idea.

Other constraints:
- we will want to provide an efficient blocking API, it's what is expected.
- an async api might be nice, perhaps it can layer on or something.
- Making HTable thread agnostic might be useful. Pooling the write buffer or 
doing something else interesting there would be necessary.


> Rewrite our client
> ------------------
>
>                 Key: HBASE-3523
>                 URL: https://issues.apache.org/jira/browse/HBASE-3523
>             Project: HBase
>          Issue Type: Brainstorming
>            Reporter: stack
>
> Is it just me or do others sense that there is pressure building to redo the 
> client?  If just me, ignore the below... I'll just keep notes in here.  
> Otherwise, what would the requirements for a client rewrite look like?
> + Let out InterruptedException
> + Enveloping of messages or space for metadata that can be passed by client 
> to server and by server to client; e.g. the region a.b.c moved to server 
> x.y.z. or scanner is finished or timeout
> + A different RPC? One with tighter serialization.
> + More sane timeout/retry policy.
> Does it have to support async communication?  Do callbacks?
> What else?

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to