diff --git a/CHANGES.txt b/CHANGES.txt index b309e96344..f14eb2204b 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -36,6 +36,7 @@ Merged from 2.2: (CASSANDRA-12554) Merged from 2.1: * Add system property to set the max number of native transport requests in queue (CASSANDRA-11363) + * Don't skip sstables based on maxLocalDeletionTime (CASSANDRA-12765) 3.0.9 diff --git a/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java b/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java index 23b02f3217..5f8df1b520 100644 --- a/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java +++ b/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java @@ -570,7 +570,7 @@ public class SinglePartitionReadCommand extends ReadCommand { nonIntersectingSSTables++; // sstable contains no tombstone if maxLocalDeletionTime == Integer.MAX_VALUE, so we can safely skip those entirely - if (sstable.getSSTableMetadata().maxLocalDeletionTime != Integer.MAX_VALUE) + if (sstable.hasTombstones()) { if (skippedSSTables == null) skippedSSTables = new ArrayList<>(); @@ -731,14 +731,14 @@ public class SinglePartitionReadCommand extends ReadCommand // however: if it is set, it impacts everything and must be included. Getting that top-level partition deletion costs us // some seek in general however (unless the partition is indexed and is in the key cache), so we first check if the sstable // has any tombstone at all as a shortcut. - if (sstable.getSSTableMetadata().maxLocalDeletionTime == Integer.MAX_VALUE) + if (!sstable.hasTombstones()) continue; // Means no tombstone at all, we can skip that sstable // We need to get the partition deletion and include it if it's live. In any case though, we're done with that sstable. sstable.incrementReadCount(); try (UnfilteredRowIterator iter = sstable.iterator(partitionKey(), columnFilter(), filter.isReversed(), isForThrift())) { - if (iter.partitionLevelDeletion().isLive()) + if (!iter.partitionLevelDeletion().isLive()) { sstablesIterated++; result = add(UnfilteredRowIterators.noRowsIterator(iter.metadata(), iter.partitionKey(), Rows.EMPTY_STATIC_ROW, iter.partitionLevelDeletion(), filter.isReversed()), result, filter, sstable.isRepaired()); diff --git a/src/java/org/apache/cassandra/io/sstable/format/SSTableReader.java b/src/java/org/apache/cassandra/io/sstable/format/SSTableReader.java index 9f31af1509..f0cdcf5ef3 100644 --- a/src/java/org/apache/cassandra/io/sstable/format/SSTableReader.java +++ b/src/java/org/apache/cassandra/io/sstable/format/SSTableReader.java @@ -1840,6 +1840,14 @@ public abstract class SSTableReader extends SSTable implements SelfRefCounted