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

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

In fact if AsyncOutput could support write(Cell, len)  - if that API supports 
writing the length as integer followed by the bytes at one shot that would be 
much better
{code}
private void writeCellData(byte[] b, int offset, int len) {
    buf.ensureWritable(len + Size_ofINT);
    if (cryptoCodec == null) {
     buf.writeInt(len)
      buf.writeBytes(b, off, len);
    } else {
         // similar like above
    }
  }
{code}
The API name may not be good but this is what we ideally want. In the normal 
WALcellCodec case we don have these additional checks.

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

Reply via email to