Caleb Rackliffe created CASSANDRA-16675:
-------------------------------------------

             Summary: Preserve Query Performance with 
ClusteringIndexNamesFilter After Running DROP COMPACT STORAGE
                 Key: CASSANDRA-16675
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-16675
             Project: Cassandra
          Issue Type: Improvement
          Components: Legacy/Local Write-Read Paths
            Reporter: Caleb Rackliffe
            Assignee: Caleb Rackliffe


Before the completion of CASSANDRA-16226, upgrading a cluster from 2.1 to 3.0 
with compact tables could cause a significant regression in the latency of 
reads using ClusteringIndexNamesFilter. The details are described in that Jira, 
but in short, 3.0+ did not skip SSTables it should have during reads, because 
it thought (wrongly) there might be primary key liveness information in 
SSTables for compact tables.

CASSANDRA-16226 addressed this behavior for still-compact tables, and also 
maintained it after DROP COMPACT STORAGE was run. However, it also allowed 
tables that were never compact to drop rows from query results if they 
contained no live non-key columns, which is only a normal behavior for compact 
tables. This is addressed in CASSANDRA-16671 by reverting the bits of the logic 
from CASSANDRA-16226 that deal with formerly compact tables where DROP COMPACT 
STORAGE has been run, in the interest of unblocking the 4.0 release and making 
sure strictly compact and strictly non-compact tables are queried properly and 
construct properly formed results.

This goal of this issue is to safely restore the performance of formerly 
compact tables, which necessarily contain ambiguous primary key liveness info. 
Roughly, the idea is that we record in a system table (and pull into 
TableMetadata) the time when DROP COMPACT STORAGE is executed. If a time exists 
for a table, we can treat it as being formerly compact, and ignore primary key 
liveness info for determining row completeness in 
SinglePartitionReadCommand#isComplete(). Otherwise, the normal rules for 
never-compact tables will apply, avoiding any regression in the scenario 
described by CASSANDRA-16671.

This would obviously not be helpful in the case where a user has already 
dropped compact storage, but it may logically be the best we can do, given we 
cannot correctly reconstruct liveness info for SSTables created while a table 
was compact (i.e. there is no way to tell INSERT and UPDATE apart for those). 
Especially if CASSANDRA-16671 moves in the direction of disabling DROP COMPACT 
STORAGE by default, I would also propose that we do this only for 4.0+.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

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

Reply via email to