[ 
https://issues.apache.org/jira/browse/HBASE-12684?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jurriaan Mous updated HBASE-12684:
----------------------------------
    Attachment: HBASE-12684-v22.patch

I did my best to squeeze out any performance I could. I looked to call traces 
what took up time and optimized what I could optimize.

While performance is a bit better I don't think I can squeeze out any more in 
this Blocking construct. Netty its pipeline construction with extra promise 
creation internally and promises needed for the blocking calls is a bit more 
expensive than writing directly to a socket like the current RpcClientImpl is 
doing. I think what makes the Async client slower in the blocking constructions 
it can gain speed by moving calls to true async calls so it can do more at the 
same time. To accomplish the same with the current client the same overhead is 
needed to manage concurrent async writes to a socket and the same promises to 
free up executing threads. So to move to a faster future it is unavoidable to 
create some regression in the present. Or maybe I am missing something?

Changes made:

- Moved of writes as soon as possible to new eventloop so call can returned 
sooner to client.
- Fix buffer size issue on writes.
- Remove redundant header builder creation.
- Simplify CallWriteListener
- Wrap debug calls with debug enabled check.
- Inline connection preamble creation.
- Move response protobuf reading to a Parser.
- Fix test fail on AsyncCall its timed sync.

> 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-DEBUG2.patch, HBASE-12684-DEBUG3.patch, 
> HBASE-12684-v1.patch, HBASE-12684-v10.patch, HBASE-12684-v11.patch, 
> HBASE-12684-v12.patch, HBASE-12684-v13.patch, HBASE-12684-v14.patch, 
> HBASE-12684-v15.patch, HBASE-12684-v16.patch, HBASE-12684-v17.patch, 
> HBASE-12684-v17.patch, HBASE-12684-v18.patch, HBASE-12684-v19.1.patch, 
> HBASE-12684-v19.patch, HBASE-12684-v19.patch, HBASE-12684-v2.patch, 
> HBASE-12684-v20-heapBuffer.patch, HBASE-12684-v20.patch, 
> HBASE-12684-v21-heapBuffer.1.patch, HBASE-12684-v21-heapBuffer.patch, 
> HBASE-12684-v21.patch, HBASE-12684-v22.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, myrecording.jfr, requests.png
>
>
> 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