Repository: cassandra Updated Branches: refs/heads/cassandra-2.1 572ef50dd -> 521b36311 refs/heads/trunk 7aefd914c -> abd528a0f
Use correct bounds for page cache eviction of compressed files patch by benedict; reviewed by marcus for CASSANDRA-8746 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/521b3631 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/521b3631 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/521b3631 Branch: refs/heads/cassandra-2.1 Commit: 521b36311ad23f3defd6abf36becda61388add9c Parents: 572ef50 Author: Benedict Elliott Smith <[email protected]> Authored: Wed Mar 18 11:08:08 2015 +0000 Committer: Benedict Elliott Smith <[email protected]> Committed: Wed Mar 18 11:08:08 2015 +0000 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../cassandra/io/sstable/SSTableReader.java | 40 +++----------------- .../io/util/CompressedPoolingSegmentedFile.java | 7 ++++ .../io/util/CompressedSegmentedFile.java | 7 ++++ .../apache/cassandra/io/util/SegmentedFile.java | 6 +++ 5 files changed, 27 insertions(+), 34 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/521b3631/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 36bdb39..3f96330 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.1.4 + * Use correct bounds for page cache eviction of compressed files (CASSANDRA-8746) * SSTableScanner enforces its bounds (CASSANDRA-8946) * Cleanup cell equality (CASSANDRA-8947) * Introduce intra-cluster message coalescing (CASSANDRA-8692) http://git-wip-us.apache.org/repos/asf/cassandra/blob/521b3631/src/java/org/apache/cassandra/io/sstable/SSTableReader.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/io/sstable/SSTableReader.java b/src/java/org/apache/cassandra/io/sstable/SSTableReader.java index 41e4adb..f42bfc7 100644 --- a/src/java/org/apache/cassandra/io/sstable/SSTableReader.java +++ b/src/java/org/apache/cassandra/io/sstable/SSTableReader.java @@ -896,8 +896,8 @@ public class SSTableReader extends SSTable implements SelfRefCounted<SSTableRead { public void run() { - CLibrary.trySkipCache(dfile.path, 0, dataStart); - CLibrary.trySkipCache(ifile.path, 0, indexStart); + dfile.dropPageCache(dataStart); + ifile.dropPageCache(indexStart); if (runOnClose != null) runOnClose.run(); } @@ -920,8 +920,8 @@ public class SSTableReader extends SSTable implements SelfRefCounted<SSTableRead { public void run() { - CLibrary.trySkipCache(dfile.path, 0, 0); - CLibrary.trySkipCache(ifile.path, 0, 0); + dfile.dropPageCache(0); + ifile.dropPageCache(0); runOnClose.run(); } }; @@ -2181,8 +2181,8 @@ public class SSTableReader extends SSTable implements SelfRefCounted<SSTableRead if (isCompacted.get()) SystemKeyspace.clearSSTableReadMeter(desc.ksname, desc.cfname, desc.generation); // don't ideally want to dropPageCache for the file until all instances have been released - dropPageCache(desc.filenameFor(Component.DATA)); - dropPageCache(desc.filenameFor(Component.PRIMARY_INDEX)); + CLibrary.trySkipCache(desc.filenameFor(Component.DATA), 0, 0); + CLibrary.trySkipCache(desc.filenameFor(Component.PRIMARY_INDEX), 0, 0); } public String name() @@ -2204,32 +2204,4 @@ public class SSTableReader extends SSTable implements SelfRefCounted<SSTableRead return refc; } } - - private static void dropPageCache(String filePath) - { - RandomAccessFile file = null; - - try - { - file = new RandomAccessFile(filePath, "r"); - - int fd = CLibrary.getfd(file.getFD()); - - if (fd > 0) - { - if (logger.isDebugEnabled()) - logger.debug(String.format("Dropping page cache of file %s.", filePath)); - - CLibrary.trySkipCache(fd, 0, 0); - } - } - catch (IOException e) - { - // we don't care if cache cleanup fails - } - finally - { - FileUtils.closeQuietly(file); - } - } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/521b3631/src/java/org/apache/cassandra/io/util/CompressedPoolingSegmentedFile.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/io/util/CompressedPoolingSegmentedFile.java b/src/java/org/apache/cassandra/io/util/CompressedPoolingSegmentedFile.java index 40a54dc..3b71ddd 100644 --- a/src/java/org/apache/cassandra/io/util/CompressedPoolingSegmentedFile.java +++ b/src/java/org/apache/cassandra/io/util/CompressedPoolingSegmentedFile.java @@ -73,6 +73,13 @@ public class CompressedPoolingSegmentedFile extends PoolingSegmentedFile impleme } } + public void dropPageCache(long before) + { + if (before >= metadata.dataLength) + super.dropPageCache(0); + super.dropPageCache(metadata.chunkFor(before).offset); + } + public RandomAccessReader createReader() { return CompressedRandomAccessReader.open(path, metadata, null); http://git-wip-us.apache.org/repos/asf/cassandra/blob/521b3631/src/java/org/apache/cassandra/io/util/CompressedSegmentedFile.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/io/util/CompressedSegmentedFile.java b/src/java/org/apache/cassandra/io/util/CompressedSegmentedFile.java index 9721bc3..830fc4b 100644 --- a/src/java/org/apache/cassandra/io/util/CompressedSegmentedFile.java +++ b/src/java/org/apache/cassandra/io/util/CompressedSegmentedFile.java @@ -88,6 +88,13 @@ public class CompressedSegmentedFile extends SegmentedFile implements ICompresse } } + public void dropPageCache(long before) + { + if (before >= metadata.dataLength) + super.dropPageCache(0); + super.dropPageCache(metadata.chunkFor(before).offset); + } + public RandomAccessReader createReader() { return CompressedRandomAccessReader.open(path, metadata); http://git-wip-us.apache.org/repos/asf/cassandra/blob/521b3631/src/java/org/apache/cassandra/io/util/SegmentedFile.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/io/util/SegmentedFile.java b/src/java/org/apache/cassandra/io/util/SegmentedFile.java index 146494d..c65ecbf 100644 --- a/src/java/org/apache/cassandra/io/util/SegmentedFile.java +++ b/src/java/org/apache/cassandra/io/util/SegmentedFile.java @@ -31,6 +31,7 @@ import org.apache.cassandra.config.Config; import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.io.FSReadError; import org.apache.cassandra.io.compress.CompressedSequentialWriter; +import org.apache.cassandra.utils.CLibrary; import org.apache.cassandra.utils.Pair; import org.apache.cassandra.utils.concurrent.RefCounted; import org.apache.cassandra.utils.concurrent.SharedCloseableImpl; @@ -111,6 +112,11 @@ public abstract class SegmentedFile extends SharedCloseableImpl return reader; } + public void dropPageCache(long before) + { + CLibrary.trySkipCache(path, 0, before); + } + /** * @return A SegmentedFile.Builder. */
