diff --git a/CHANGES.txt b/CHANGES.txt index 58239c9de9..7298e0c643 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -12,6 +12,7 @@ Merged from 3.11: * stop_paranoid disk failure policy is ignored on CorruptSSTableException after node is up (CASSANDRA-15191) * Frozen RawTuple is not annotated with frozen in the toString method (CASSANDRA-15857) Merged from 3.0: + * Remove broken 'defrag-on-read' optimization (CASSANDRA-15432) * Check for endpoint collision with hibernating nodes (CASSANDRA-14599) * Operational improvements and hardening for replica filtering protection (CASSANDRA-15907) * Fix empty/null json string representation (CASSANDRA-15896) diff --git a/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java b/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java index 6fbe52314a..e581be56df 100644 --- a/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java +++ b/src/java/org/apache/cassandra/db/SinglePartitionReadCommand.java @@ -28,7 +28,6 @@ import com.google.common.collect.Sets; import org.apache.cassandra.cache.IRowCacheEntry; import org.apache.cassandra.cache.RowCacheKey; import org.apache.cassandra.cache.RowCacheSentinel; -import org.apache.cassandra.concurrent.Stage; import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.db.filter.*; import org.apache.cassandra.db.lifecycle.*; @@ -817,7 +816,6 @@ public class SinglePartitionReadCommand extends ReadCommand implements SinglePar /* add the SSTables on disk */ Collections.sort(view.sstables, SSTableReader.maxTimestampDescending); - boolean onlyUnrepaired = true; // read sorted sstables SSTableReadMetricsCollector metricsCollector = new SSTableReadMetricsCollector(); for (SSTableReader sstable : view.sstables) @@ -889,9 +887,6 @@ public class SinglePartitionReadCommand extends ReadCommand implements SinglePar if (iter.isEmpty()) continue; - if (sstable.isRepaired()) - onlyUnrepaired = false; - result = add( RTBoundValidator.validate(iter, RTBoundValidator.Stage.SSTABLE, false), result, @@ -910,26 +905,6 @@ public class SinglePartitionReadCommand extends ReadCommand implements SinglePar cfs.metric.topReadPartitionFrequency.addSample(key.getKey(), 1); StorageHook.instance.reportRead(cfs.metadata.id, partitionKey()); - // "hoist up" the requested data into a more recent sstable - if (metricsCollector.getMergedSSTables() > cfs.getMinimumCompactionThreshold() - && onlyUnrepaired - && !cfs.isAutoCompactionDisabled() - && cfs.getCompactionStrategyManager().shouldDefragment()) - { - // !!WARNING!! if we stop copying our data to a heap-managed object, - // we will need to track the lifetime of this mutation as well - Tracing.trace("Defragmenting requested data"); - - try (UnfilteredRowIterator iter = result.unfilteredIterator(columnFilter(), Slices.ALL, false)) - { - final Mutation mutation = new Mutation(PartitionUpdate.fromIterator(iter, columnFilter())); - Stage.MUTATION.execute(() -> { - // skipping commitlog and index updates is fine since we're just de-fragmenting existing data - Keyspace.open(mutation.getKeyspaceName()).apply(mutation, false, false); - }); - } - } - return result.unfilteredIterator(columnFilter(), Slices.ALL, clusteringIndexFilter().isReversed()); } diff --git a/src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java b/src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java index 1e72ae55ff..c764d6e5d1 100644 --- a/src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java +++ b/src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java @@ -252,11 +252,6 @@ public abstract class AbstractCompactionStrategy return new ScannerList(scanners); } - public boolean shouldDefragment() - { - return false; - } - public String getName() { return getClass().getSimpleName(); diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionStrategyManager.java b/src/java/org/apache/cassandra/db/compaction/CompactionStrategyManager.java index 546f61b445..708faff44a 100644 --- a/src/java/org/apache/cassandra/db/compaction/CompactionStrategyManager.java +++ b/src/java/org/apache/cassandra/db/compaction/CompactionStrategyManager.java @@ -134,7 +134,6 @@ public class CompactionStrategyManager implements INotificationConsumer we will use the new compaction parameters. */ private volatile CompactionParams schemaCompactionParams; - private boolean shouldDefragment; private boolean supportsEarlyOpen; private int fanout; @@ -309,7 +308,6 @@ public class CompactionStrategyManager implements INotificationConsumer compactionStrategyFor(sstable).addSSTable(sstable); } holders.forEach(AbstractStrategyHolder::startup); - shouldDefragment = repaired.first().shouldDefragment(); supportsEarlyOpen = repaired.first().supportsEarlyOpen(); fanout = (repaired.first() instanceof LeveledCompactionStrategy) ? ((LeveledCompactionStrategy) repaired.first()).getLevelFanoutSize() : LeveledCompactionStrategy.DEFAULT_LEVEL_FANOUT_SIZE; } @@ -600,11 +598,6 @@ public class CompactionStrategyManager implements INotificationConsumer return res; } - public boolean shouldDefragment() - { - return shouldDefragment; - } - private void handleFlushNotification(Iterable added) { // If reloaded, SSTables will be placed in their correct locations diff --git a/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java b/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java index a79299e1b4..8d1d8dac2e 100644 --- a/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java +++ b/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java @@ -323,12 +323,6 @@ public class SizeTieredCompactionStrategy extends AbstractCompactionStrategy return uncheckedOptions; } - @Override - public boolean shouldDefragment() - { - return true; - } - @Override public synchronized void addSSTable(SSTableReader added) {