hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ramkrishna.s.vasudevan (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HBASE-16891) Try copying to the Netty ByteBuf directly from the WALEdit
Date Fri, 28 Oct 2016 08:11:58 GMT

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

ramkrishna.s.vasudevan commented on HBASE-16891:
------------------------------------------------

This looks good. 
So you will be writing byte by byte for the Int case and you don't want to support the copy
at once way? Because every time you write a byte 
{code}
if (eventLoop.inEventLoop()) {
{code}
you check for the above and also do 
{code}
  buf.ensureWritable(len);
{code}
If we could write the entire thing at one shot all this can be done only once per cell.
Also we would like to support this for ByteBuffers also. So it would be better if we could
add that support  for which we may have to extend ByteBufferSupportOutputStream.
The good thing here is that you have ensured that every where you write to Asyncoutput (it
supports writing from BB) and there is no need of that 'buf' (ByteArrayoutputStream') now?



> Try copying to the Netty ByteBuf directly from the WALEdit
> ----------------------------------------------------------
>
>                 Key: HBASE-16891
>                 URL: https://issues.apache.org/jira/browse/HBASE-16891
>             Project: HBase
>          Issue Type: Sub-task
>          Components: wal
>    Affects Versions: 2.0.0
>            Reporter: ramkrishna.s.vasudevan
>            Assignee: ramkrishna.s.vasudevan
>             Fix For: 2.0.0
>
>         Attachments: HBASE-16891-v1.patch, HBASE-16891.patch
>
>
> -> The FanOutOneBlockAsyncDFSOutput is a much sophisticated dfs client model that
works with Netty ByteBuf. Here we hold on connection to the datanodes using
> Netty Channels. And the idea is to write data direclty to these channels.
> AsyncHLog gets an append call. The AysncWAL uses the HBase's ByteArrayOutputSTream and
so the content of the cell is written to this BAOS and that is again
> copied to the netty Bytebuf in the FanOutOneBlockAsyncDFSOutput.
> So when the sync call happens this FanoutDFSoutput does the checksum calcualtion itself
and then writes the content of this buffer direclty to the DN channel.
> -> In case of FSHLOg this is different. When an append call comes we direclty write
the content to the FSDataOutputStream (it is copied to this stream).
> Then here internally there is a checkSum calculation that happens. when a sync call happens
there is noth ing to do except to notify the NN to flush the latest
> data.
> AS we can see from the above that there are two copies in AsyncWAL
> -> From the Cell to the BAOS 
> -> From the BAOS to the Netty byte buf
> -> On sync() call, do check sum and finally flush the netty byte buf to the DN channel
> In case of FSHLog
> -> From cell to the FSDataoutputstream. data is copied. Check sum happens here.
> -> Sync call just tries to notify the NN.



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

Mime
View raw message