Details
-
Sub-task
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
-
None
Description
Even if we set max versions in the scan to 1, HBase is still returning all the versions if there is a filter.
It seems to be a side-effect of HBASE-17125. where if INCLUDE_AND_NEXT_COL is the return code from the filter, we are not checking the version of the cell even though the documentation says.
@InterfaceAudience.Public public enum ReturnCode { /** * Include the Cell */ INCLUDE, /** * Include the Cell and seek to the next column skipping older versions. */ INCLUDE_AND_NEXT_COL, }
In UserScanQueryMatcher#mergeFilterResponse()
case INCLUDE_AND_NEXT_COL: if (matchCode == MatchCode.INCLUDE) { matchCode = MatchCode.INCLUDE_AND_SEEK_NEXT_COL; } break; if (matchCode == MatchCode.INCLUDE_AND_SEEK_NEXT_COL || matchCode == MatchCode.INCLUDE_AND_SEEK_NEXT_ROW) { return matchCode; } // Now we will check versions again. if (curColCell == null || !CellUtil.matchingRowColumn(cell, curColCell)) { count = 0; curColCell = cell; } count += 1; return count > versionsAfterFilter ? MatchCode.SEEK_NEXT_COL : MatchCode.INCLUDE;
anoopsamjohn, It could be a bug in HBase