Jordan West created CASSANDRA-14248:
---------------------------------------
Summary: SSTableIndex should not use Ref#globalCount() to
determine when to delete index file
Key: CASSANDRA-14248
URL: https://issues.apache.org/jira/browse/CASSANDRA-14248
Project: Cassandra
Issue Type: Bug
Components: sasi
Reporter: Jordan West
Assignee: Jordan West
Fix For: 3.11.x
{{SSTableIndex}} instances maintain a {{Ref}} to the underlying
{{SSTableReader}} instance. When determining whether or not to delete the file
after the last {{SSTableIndex}} reference is released, the implementation uses
{{sstableRef.globalCount()}}:
[https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sasi/SSTableIndex.java#L135.]
This is incorrect because {{sstableRef.globalCount()}} returns the number of
references to the specific instance of {{SSTableReader}}. However, in cases
like index summary redistribution, there can be more than one instance of
{{SSTableReader}}. Further, since the reader is shared across multiple indexes,
not all indexes see the count go to 0. This can lead to cases where the
{{SSTableIndex}} file is incorrectly deleted or not deleted when it should be.
A more correct implementation would be to either:
* Tie into the existing {{SSTableTidier}}. SASI indexes already are SSTable
components but are not cleaned up by the {{SSTableTidier}} because they are not
found with the currently cleanup implementation
* Revamp {{SSTableIndex}} reference counting to use {{Ref}} and implement a
new tidier.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]