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

Anoop Sam John commented on HBASE-16859:
----------------------------------------

I saw it now.  So the ByteOuput is treated the same was as an OS.  Am not sure 
then why we need a new interface.  Not sure abt the intent of adding this by PB 
team..  In that case, one can go with an impl of OS itself no need for a new 
Byteouput.  The ByteInput is created with below criteria
{code}
/**
 * An input for raw bytes. This is similar to an InputStream but it is offset 
addressable. All the
 * read APIs are relative.
 */
@ExperimentalApi
public abstract class ByteInput {
{code}
See we say it has to be byte addressable/accessible.  Means it is some what 
like BB or byte[].. Its use is specifically when the input is a collection of 
these kind of data structures. Then also once can make an IS around that and 
use but the extra byte[] and in btw copy to there will happen.  When things are 
offset accessible, it is not needed.  Seems like ByteOuput is designed to allow 
lazy writes only
{code}
 <p><b>Lazy write operations:</b> where the caller guarantees that it will 
never modify the
 * provided buffer and it can therefore be considered immutable. The target 
method is free to
 * maintain a reference to the buffer beyond the scope of the method call (e.g. 
until the write
 * operation completes).
{code}


> Use Bytebuffer pool for non java clients specifically for scans/gets
> --------------------------------------------------------------------
>
>                 Key: HBASE-16859
>                 URL: https://issues.apache.org/jira/browse/HBASE-16859
>             Project: HBase
>          Issue Type: Sub-task
>            Reporter: ramkrishna.s.vasudevan
>            Assignee: ramkrishna.s.vasudevan
>             Fix For: 2.0.0
>
>         Attachments: HBASE-16859_V1.patch, HBASE-16859_V2.patch, 
> HBASE-16859_V2.patch
>
>
> In case of non java clients we still write the results and header into a on 
> demand  byte[]. This can be changed to use the BBPool (onheap or offheap 
> buffer?).
> But the basic problem is to identify if the response is for scans/gets. 
> - One easy way to do it is use the MethodDescriptor per Call and use the   
> name of the MethodDescriptor to identify it is a scan/get. But this will 
> pollute RpcServer by checking for scan/get type response.
> - Other way is always set the result to cellScanner but we know that 
> isClientCellBlockSupported is going to false for non PB clients. So ignore 
> the cellscanner and go ahead with the results in PB. But this is not clean
> - third one is that we already have a RpccallContext being passed to the RS. 
> In case of scan/gets/multiGets we already set a Rpccallback for shipped call. 
> So here on response we can check if the callback is not null and check for 
> isclientBlockSupported. In this case we can get the BB from the pool and 
> write the result and header to that BB. May be this looks clean?



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

Reply via email to