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

Queries with multi-column replica-side filtering can miss rows

    XMLWordPrintableJSON

Details

    • Correctness - Consistency
    • Normal
    • Challenging
    • Code Inspection
    • All
    • None
    • 0.3

    Description

      SELECT queries with multi-column replica-side filtering can miss rows if the filtered columns are spread across out-of-sync replicas. This dtest reproduces the issue:

      @Test
      public void testMultiColumnReplicaSideFiltering() throws IOException
      {
          try (Cluster cluster = init(Cluster.build().withNodes(2).start()))
          {
              cluster.schemaChange(withKeyspace("CREATE TABLE %s.t (k int PRIMARY KEY, a int, b int)"));
      
              // insert a split row
              cluster.get(1).executeInternal(withKeyspace("INSERT INTO %s.t(k, a) VALUES (0, 1)"));
              cluster.get(2).executeInternal(withKeyspace("INSERT INTO %s.t(k, b) VALUES (0, 2)"));
      
              String select = withKeyspace("SELECT * FROM %s.t WHERE a = 1 AND b = 2 ALLOW FILTERING");
              Object[][] initialRows = cluster.coordinator(1).execute(select, ALL);
              assertRows(initialRows, row(0, 1, 2)); // not found!!
          }
      }
      

      This edge case affects queries using ALLOW FILTERING or any index implementation.

      It affects all branches since multi-column replica-side filtering queries were introduced, long before 3.0.

      The protection mechanism added by CASSANDRA-8272/8273 won't deal with this case, since it only solves single-column conflicts where stale rows could resurrect. This bug however doesn't resurrect data, it can only miss rows while the replicas are out-of-sync.

      Attachments

        Issue Links

          Activity

            People

              maedhroz Caleb Rackliffe
              adelapena Andres de la Peña
              Caleb Rackliffe
              Votes:
              0 Vote for this issue
              Watchers:
              12 Start watching this issue

              Dates

                Created:
                Updated:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 10m
                  10m