tephra-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Thomas D'Silva (JIRA)" <j...@apache.org>
Subject [jira] [Created] (TEPHRA-208) Compaction removes rows incorrectly for family deletes with column level conflict detection
Date Mon, 09 Jan 2017 22:18:58 GMT
Thomas D'Silva created TEPHRA-208:
-------------------------------------

             Summary: 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


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)

Mime
View raw message