[
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)