tephra-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (TEPHRA-208) Compaction removes rows incorrectly for family deletes with column level conflict detection
Date Fri, 20 Jan 2017 22:07:26 GMT

    [ https://issues.apache.org/jira/browse/TEPHRA-208?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15832480#comment-15832480
] 

ASF GitHub Bot commented on TEPHRA-208:
---------------------------------------

Github user twdsilva commented on the issue:

    https://github.com/apache/incubator-tephra/pull/26
  
    @gokulavasan , thanks.  I have fixed the issue and the tests pass now.


> 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)

Mime
View raw message