Caleb Rackliffe created CASSANDRA-21515:
-------------------------------------------

             Summary: Avoid Rebuilding Per-SSTable SAI Components Unless All 
Column Indexes are Being Rebuilt
                 Key: CASSANDRA-21515
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-21515
             Project: Apache Cassandra
          Issue Type: Bug
            Reporter: Caleb Rackliffe
            Assignee: Caleb Rackliffe


When a table has multiple SAI indexes, they share per-SSTable index components 
(the primary key map, token/partition-key blocks, group metadata). Running 
nodetool rebuild_index naming only one of those indexes triggers a "full 
rebuild" path that unlinks and rewrites those shared components on every 
SSTable, but only the rebuilt index is notified: its view is refreshed against 
the newly-written state, while the bystander indexes are never told. Those 
bystanders keep serving queries through their existing {{SSTableIndex}} 
objects, which hold ref-counted shared copies of the old {{SSTableContext}}, so 
they silently continue resolving row IDs through the now-unlinked (but still 
mmap'd) old primary key map, and only release that stale reference when the 
sstable is compacted, the bystander is itself dropped or rebuilt, or the node 
restarts. Nothing in the code path fails, marks the bystanders non-queryable, 
or checks that the rewritten mapping matches the old one; correctness holds 
only because row-ID ordering happens to be deterministic given the same input 
sstable, and the cost is a hidden disk/FD leak plus under-reported per-SSTable 
metrics until the stale references are finally released.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to