Zheng Hu created HBASE-19252: -------------------------------- Summary: Move the transform logic of FilterList into transformCell() method to avoid extra ref to question cell Key: HBASE-19252 URL: https://issues.apache.org/jira/browse/HBASE-19252 Project: HBase Issue Type: Bug Reporter: Zheng Hu Assignee: Zheng Hu
As [~anoop.hbase] and I discussed, we can implement the filterKeyValue () and transformCell() methods as following to avoid saving transformedCell & referenceCell state in FilterList, and we can avoid the costly cell clone. {code} ReturnCode filterKeyValue(Cell c){ ReturnCode rc = null; for(Filter filter: sub-filters){ // ... rc = mergeReturnCode(rc, filter.filterKeyValue(c)); // ... } return rc; } Cell transformCell(Cell c) throws IOException { Cell transformed = c; for(Filter filter: sub-filters){ if(filter.filterKeyValue(c) is INCLUDE*) { // ----> line#1 transformed = filter.transformCell(transformed); } } return transformed; } {code} For line #1, we need to remember the return code of the sub-filter for its filterKeyValue(). because only INCLUDE* ReturnCode, we need to transformCell for sub-filter. A new boolean array will be introduced in FilterList. and the cost of maintaining the boolean array will be less than the cost of maintaining the two ref of question cell. -- This message was sent by Atlassian JIRA (v6.4.14#64029)