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