You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by be...@apache.org on 2015/03/18 12:09:07 UTC
[2/4] cassandra git commit: Use correct bounds for page cache
eviction of compressed files
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/trunk
Commit: 521b36311ad23f3defd6abf36becda61388add9c
Parents: 572ef50
Author: Benedict Elliott Smith <be...@apache.org>
Authored: Wed Mar 18 11:08:08 2015 +0000
Committer: Benedict Elliott Smith <be...@apache.org>
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.
*/