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)