[ https://issues.apache.org/jira/browse/TEPHRA-208?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15838887#comment-15838887 ]
ASF GitHub Bot commented on TEPHRA-208: --------------------------------------- Github user twdsilva commented on the issue: https://github.com/apache/incubator-tephra/pull/26 @poornachandra Thanks for the review. I have made the change. > Compaction removes rows incorrectly for family deletes with column level > conflict detection > -------------------------------------------------------------------------------------------- > > Key: TEPHRA-208 > URL: https://issues.apache.org/jira/browse/TEPHRA-208 > Project: Tephra > Issue Type: Bug > Affects Versions: 0.9.0-incubating > Reporter: Thomas D'Silva > Assignee: Poorna Chandra > Attachments: TEPHRA-208.patch > > > In DeleteTracker we only check the timestamp while removing cells during > compaction. If the previous row had a family delete, cells from subsequent > rows could also be compacted. > The attached test fails without the following change > {code} > private static final class DeleteTracker { > private long familyDeleteTs; > + private byte[] rowKey; > > public static boolean isFamilyDelete(Cell cell) { > return !TxUtils.isPreExistingVersion(cell.getTimestamp()) && > @@ -300,14 +301,17 @@ public class TransactionVisibilityFilter extends > FilterBase { > > public void addFamilyDelete(Cell delete) { > this.familyDeleteTs = delete.getTimestamp(); > + this.rowKey = Bytes.copy(delete.getRowArray(), delete.getRowOffset(), > delete.getRowLength()); > } > > public boolean isDeleted(Cell cell) { > - return cell.getTimestamp() <= familyDeleteTs; > + return rowKey != null && Bytes.compareTo(cell.getRowArray(), > cell.getRowOffset(), > + cell.getRowLength(), rowKey, 0, rowKey.length) == 0 && > cell.getTimestamp() <= familyDeleteTs; > } > > public void reset() { > this.familyDeleteTs = 0; > + this.rowKey = null; > } > } > } > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)