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

Anastasia Braginsky commented on HBASE-16645:
---------------------------------------------

Hi [~chia7712],

It is a genius idea to use Karnaugh Map for code generation. :)
I didn't mean to take over this jira, but if you need a help I can do this.
I left some easy to apply comments in Review Board, did you see them?

The hardest part was probably to generate the comments to the K-map generated 
code.
Hereby, please find my best effort for the comments for intuition...
What do you say?

{\code}
/* Get the index of the given anchor key for creating subsequent set.
  ** It doesn't matter whether the given key exists in the set or not.
  **
  ** taking into consideration whether
  ** the key should be inclusive or exclusive */
  private int getValidIndex(Cell key, boolean inclusive, boolean tail) {
    final int index = find(key);
    // get the valid (positive) insertion point from the output of the find() 
method
    int insertionPoint = index < 0 ? ~index : index;

    // correct the insertion point in case the given anchor key DOES EXIST in 
the set
    if (index >= 0) {
      if ( descending && !(tail ^ inclusive)) {
        // for the descending case
        // if anchor for head set (tail=false) AND anchor is not inclusive -> 
move the insertion pt
        // if anchor for tail set (tail=true) AND the keys is inclusive -> move 
the insertion point
        //         because the end index of a set is the index of the cell 
after the maximal cell
        insertionPoint += 1;
      } else if ( !descending && (tail ^ inclusive)) {
        // for the ascending case
        // if anchor for head set (tail=false) AND anchor is inclusive -> move 
the insertion point
        //         because the end index of a set is the index of the cell 
after the maximal cell
        // if anchor for tail set (tail=true) AND the keys is not inclusive -> 
move the insertion pt
        insertionPoint += 1;
      }
    }

    // insert the insertion point into the valid range,
    // as we may enlarge it too much in the above correction
    return Math.min(Math.max(insertionPoint, minCellIdx), maxCellIdx);
}
{\code}

Thanks,
Anastasia

> Wrong range of Cells is caused by CellFlatMap#tailMap, headMap, and SubMap
> --------------------------------------------------------------------------
>
>                 Key: HBASE-16645
>                 URL: https://issues.apache.org/jira/browse/HBASE-16645
>             Project: HBase
>          Issue Type: Bug
>    Affects Versions: 2.0.0
>            Reporter: ChiaPing Tsai
>             Fix For: 2.0.0
>
>         Attachments: HBASE-16645.v0.patch, HBASE-16645.v1.patch
>
>
> Two reasons are shown below:
> 1) CellFlatMap#find doesn’t consider desc order array
> 2) CellFlatMap#getValidIndex return the wrong upper bound



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

Reply via email to