Uploaded image for project: 'Cassandra'
  1. Cassandra
  2. CASSANDRA-11427

Range slice queries CL > ONE trigger read-repair of purgeable tombstones

Agile BoardAttach filesAttach ScreenshotBulk Copy AttachmentsBulk Move AttachmentsVotersWatch issueWatchersCreate sub-taskConvert to sub-taskMoveLinkCloneLabelsUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Low
    • Resolution: Fixed
    • 2.2.6
    • None
    • None
    • Low

    Description

      Range queries will trigger read repairs for purgeable tombstones on hosts that already compacted given tombstones. Clusters with periodical jobs for scanning data ranges will likely see tombstones ressurected through RRs just to have them compacted again later at the destination host.

      Executing range queries (e.g. for reading token ranges) will compare the actual data instead of using digests when executed with CL > ONE. Responses will be consolidated by RangeSliceResponseResolver.Reducer, where the result of RowDataResolver.resolveSuperset is used as the reference version for the results. RowDataResolver.scheduleRepairs will then send the superset to all nodes that returned a different result before.

      Unfortunately this does also involve cases where the superset is just made up of purgeable tombstone(s) that already have been compacted on the other nodes. In this case a read-repair will be triggered for transfering the purgeable tombstones to all other nodes nodes that returned an empty result.

      The issue can be reproduced with the provided dtest or manually using the following steps:

      create keyspace test1 with replication = { 'class' : 'SimpleStrategy', 'replication_factor' : 2 };
      use test1;
      create table test1 ( a text, b text, primary key(a, b) ) WITH compaction = {'class': 'SizeTieredCompactionStrategy', 'enabled': 'false'} AND dclocal_read_repair_chance = 0 AND gc_grace_seconds = 0;
      
      delete from test1 where a = 'a';
      
      ccm flush;
      ccm node2 compact;
      
      use test1;
      consistency all;
      tracing on;
      select * from test1;
      

      Attachments

        1. 11427-2.1.patch
          5 kB
          Stefan Podkowinski
        2. 11427-2.2_v2.patch
          2 kB
          Stefan Podkowinski

        Issue Links

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            spod Stefan Podkowinski Assign to me
            spod Stefan Podkowinski
            Stefan Podkowinski
            Sylvain Lebresne
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment