Uploaded image for project: 'HBase'
  1. HBase
  2. HBASE-18169 Coprocessor fix and cleanup before 2.0.0 release
  3. HBASE-18945

Make a IA.LimitedPrivate interface for CellComparator

    XMLWordPrintableJSON

Details

    • Sub-task
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 2.0.0-alpha-4, 2.0.0
    • None
    • None
    • Reviewed
    • Hide
      CellCompartor has been added as an interface with IA.LimitedPrivate. It has the following methods
      #int compare(Cell leftCell, Cell rightCell);
      #int compareRows(Cell leftCell, Cell rightCell)
      #int compareRows(Cell cell, byte[] bytes, int offset, int length)
      #int compareWithoutRow(Cell leftCell, Cell rightCell)
      #int compareFamilies(Cell leftCell, Cell rightCell
      #int compareQualifiers(Cell leftCell, Cell rightCell)
      #int compareTimestamps(Cell leftCell, Cell rightCell)
      #int compareTimestamps(long leftCellts, long rightCellts)

      This is exposed to CPs and CPs can make use of the above methods to do comparisons on the cells.
      For internal usage we have CellComparatorImpl and it has static references to COMPARATOR and META_CELL_COMPARATOR.
      So when a region or store is initialized we should use one of the above comparator. For META table we need the META_CELL_COMPARATOR and all other table's regions/stores will use the COMPARTOR.
      While writing the comparator name in FixedFileTrailer of the Hfile we have now ensured that this rename of CellComparator.COMPARATOR/CellComparator.META_CELL_COMPARATOR to CellComparatorImpl.COMPARATOR/CellComparatorImpl.META_CELL_COMPARATOR is handled.

      CellUtils is an util method that provides lot of APIs that helps to do compare, matching functionalities between two cells, or with a cell and a corrpesponding byte[] etc. Some of the APIs are internally used which will be cleaned up in a follow on JIRA HBASE-18995.
      Show
      CellCompartor has been added as an interface with IA.LimitedPrivate. It has the following methods #int compare(Cell leftCell, Cell rightCell); #int compareRows(Cell leftCell, Cell rightCell) #int compareRows(Cell cell, byte[] bytes, int offset, int length) #int compareWithoutRow(Cell leftCell, Cell rightCell) #int compareFamilies(Cell leftCell, Cell rightCell #int compareQualifiers(Cell leftCell, Cell rightCell) #int compareTimestamps(Cell leftCell, Cell rightCell) #int compareTimestamps(long leftCellts, long rightCellts) This is exposed to CPs and CPs can make use of the above methods to do comparisons on the cells. For internal usage we have CellComparatorImpl and it has static references to COMPARATOR and META_CELL_COMPARATOR. So when a region or store is initialized we should use one of the above comparator. For META table we need the META_CELL_COMPARATOR and all other table's regions/stores will use the COMPARTOR. While writing the comparator name in FixedFileTrailer of the Hfile we have now ensured that this rename of CellComparator.COMPARATOR/CellComparator.META_CELL_COMPARATOR to CellComparatorImpl.COMPARATOR/CellComparatorImpl.META_CELL_COMPARATOR is handled. CellUtils is an util method that provides lot of APIs that helps to do compare, matching functionalities between two cells, or with a cell and a corrpesponding byte[] etc. Some of the APIs are internally used which will be cleaned up in a follow on JIRA HBASE-18995 .

    Description

      Based on discussions over in HBASE-18826 and HBASE-18183 it is better we expose CellComparator as a public interface so that it could be used in Region/Store interfaces to be exposed to CPs.
      Currently the Comparator is exposed in Region, STore and StoreFile. There is another discussion whether to expose it at all layers or only at Region. However since we are exposing this to CPs CellComparator being @Private is not the ideal way to do it. We have to change it to LimitedPrivate. But CellComparator has lot of additional methods which are internal (like where a Cell is compared with an incoming byte[] used in index comparsions etc).
      One way to expose is that as being done now in HBASE-18826 - by exposing the return type as Comparator<Cell>. But this is not powerful. It only allows to compare cells. So we try to expose an IA.LimitedPrivate interface that is more powerful and allows comparing individual cell components also.

      Attachments

        1. HBASE-18495.patch
          351 kB
          ramkrishna.s.vasudevan
        2. HBASE-18945_2.patch
          40 kB
          ramkrishna.s.vasudevan
        3. HBASE-18945_3.patch
          281 kB
          ramkrishna.s.vasudevan
        4. HBASE-18945_4.patch
          285 kB
          ramkrishna.s.vasudevan
        5. HBASE-18945_5.patch
          280 kB
          ramkrishna.s.vasudevan
        6. HBASE-18945_6.patch
          277 kB
          ramkrishna.s.vasudevan
        7. HBASE-18945_6.patch
          294 kB
          ramkrishna.s.vasudevan
        8. HBASE-18945_7.patch
          294 kB
          ramkrishna.s.vasudevan
        9. 18945-addendum-branch-2.txt
          2 kB
          Ted Yu

        Issue Links

          Activity

            People

              ram_krish ramkrishna.s.vasudevan
              ram_krish ramkrishna.s.vasudevan
              Votes:
              0 Vote for this issue
              Watchers:
              11 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: