Samarth Jain created PHOENIX-2824: ------------------------------------- Summary: PhoenixTransactionalIndexer rollback doesn't work correctly Key: PHOENIX-2824 URL: https://issues.apache.org/jira/browse/PHOENIX-2824 Project: Phoenix Issue Type: Bug Reporter: Samarth Jain Assignee: James Taylor
Looking at this piece of code in PhoenixTransactionalIndexer in processRollback(), something isn't right: {code} do { Cell cell = cells.get(i); hasPuts |= cell.getTypeByte() == KeyValue.Type.Put.getCode(); writePtr = cell.getTimestamp(); do { // Add at the beginning of the list to match the expected HBase // newest to oldest sort order (which TxTableState relies on // with the Result.getLatestColumnValue() calls). singleTimeCells.addFirst(cell); } while (++i < nCells && cells.get(i).getTimestamp() == writePtr); } while (i < nCells && cells.get(i).getTimestamp() <= readPtr); {code} The cell variable isn't being reset in the inner loop even though index i has been incremented. As a result we always end up adding cells.get(0) to singleTimeCells list. However, simply doing this: {code} while (++i < nCells && (cell = cells.get(i)).getTimestamp() == writePtr) {code} unfortunately doesn't work. I see test failures in MutableRollbackIT after the above change. -- This message was sent by Atlassian JIRA (v6.3.4#6332)