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

Indexer is not correctly invoked when building indexes over sstables

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Urgent
    • Resolution: Fixed
    • 3.0.11, 3.10, 4.0-alpha1, 4.0
    • None
    • None
    • Critical

    Description

      Following CASSANDRA-12796, SecondaryIndexManager#indexPartition() calls each Indexer begin and finish methods multiple times per partition (depending on the page size), as PartitionIterators#getOnlyElement() returns an empty partition even when the iterator is exhausted.

      This leads to bugs for Indexer implementations doing actual work in those methods, but even worse, it provides the Indexer the same input of an empty partition containing only a non-live partition deletion, as the Indexer#partitionDelete() method is not actually called.

      My proposed solution:
      1) Stop the iteration before the empty partition is returned and ingested into the Indexer.
      2) Actually call the Indexer#partitionDelete() method inside SecondaryIndexManager#indexPartition() (which requires to use a filtered iterator so it actually contains the deletion info).

      Attachments

        1. CustomIndexTest.java
          49 kB
          Sergio Bossa

        Activity

          People

            ifesdjeen Alex Petrov
            sbtourist Sergio Bossa
            Alex Petrov
            Sergio Bossa
            Votes:
            0 Vote for this issue
            Watchers:
            7 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: