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

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

Before patch it was, 
{code}
boolean nonOverLapping = ((getComparator().compare(firstKeyKV, 
largestScanKeyValue)) > 0
{code}
Here 
{code}
KeyValue largestScanKeyValue = scan.isReversed() ? KeyValueUtil         
1369              .createLastOnRow(scan.getStartRow()) : 
KeyValueUtil.createLastOnRow(scan              
1370              .getStopRow());
{code}
So this is going to have the type as Minimum.  So at any cost once the row part 
is not going to same we are going to return -1 from the comparator because 
{code}
    if (rFamLength + rQualLength == 0
        && right.getTypeByte() == Type.Minimum.getCode()) {
      return -1;
    }
{code}
The KV is not going to have any family or qualifier with it. So once the row is 
not going to match then we always take the first Cell as lesser only.
Coming to this
{code}
 (getComparator().compare(lastKeyKV, smallestScanKeyValue)) < 0;
{code}
Though the smallest key value is going to have type as MAXIMUM but there is no 
family or qual associated with it.  So at any point if the rows are not 
matching then we will always be returning a value > 0 and thus failing the 
above condition.  If the formed fake key is going to have a family or qual then 
it is different.  But here we just use the row along with type and ts. 
Does it make sense now Lars?




> StoreFile.passesKeyRangeFilter need not create Cells from the Scan's start 
> and stop Row
> ---------------------------------------------------------------------------------------
>
>                 Key: HBASE-14099
>                 URL: https://issues.apache.org/jira/browse/HBASE-14099
>             Project: HBase
>          Issue Type: Improvement
>          Components: Performance, Scanners
>            Reporter: ramkrishna.s.vasudevan
>            Assignee: ramkrishna.s.vasudevan
>             Fix For: 2.0.0
>
>         Attachments: HBASE-14099.patch, HBASE-14099_1.patch, 
> HBASE-14099_2.patch, HBASE-14099_3.patch, HBASE-14099_4.patch, storefile.png
>
>
> During profiling saw that the code here in passesKeyRangeFilter in Storefile
> {code}
>   KeyValue smallestScanKeyValue = scan.isReversed() ? KeyValueUtil
>           .createFirstOnRow(scan.getStopRow()) : 
> KeyValueUtil.createFirstOnRow(scan
>           .getStartRow());
>       KeyValue largestScanKeyValue = scan.isReversed() ? KeyValueUtil
>           .createLastOnRow(scan.getStartRow()) : 
> KeyValueUtil.createLastOnRow(scan
>           .getStopRow());
> {code}
> This row need not be copied now considering that we have 
> CellComparator.compareRows(Cell, byte[]). 
> We have already refactored the firstKeyKv and lastKeyKV as part of other 
> JIRAs.



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

Reply via email to