You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ma...@apache.org on 2015/11/11 08:57:01 UTC
cassandra git commit: Keep the file open in trySkipCache
Repository: cassandra
Updated Branches:
refs/heads/cassandra-3.0 d00fcbc43 -> 49c9c01f5
Keep the file open in trySkipCache
Patch by marcuse; reviewed by Stefania Alborghetti for CASSANDRA-10669
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/49c9c01f
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/49c9c01f
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/49c9c01f
Branch: refs/heads/cassandra-3.0
Commit: 49c9c01f5b100ca400fb6d3a5b1fab6721c7ee8b
Parents: d00fcbc
Author: Marcus Eriksson <ma...@apache.org>
Authored: Mon Nov 9 11:17:48 2015 +0100
Committer: Marcus Eriksson <ma...@apache.org>
Committed: Wed Nov 11 08:52:28 2015 +0100
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../cassandra/io/sstable/SSTableRewriter.java | 5 +---
.../org/apache/cassandra/utils/CLibrary.java | 29 ++++++++++----------
.../apache/cassandra/utils/CLibraryTest.java | 3 +-
4 files changed, 17 insertions(+), 21 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/49c9c01f/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index ef21f9f..d271c95 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
3.0.1
+ * Keep the file open in trySkipCache (CASSANDRA-10669)
* Updated trigger example (CASSANDRA-10257)
Merged from 2.2:
* (Hadoop) fix splits calculation (CASSANDRA-10640)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/49c9c01f/src/java/org/apache/cassandra/io/sstable/SSTableRewriter.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/io/sstable/SSTableRewriter.java b/src/java/org/apache/cassandra/io/sstable/SSTableRewriter.java
index f3885de..3632a60 100644
--- a/src/java/org/apache/cassandra/io/sstable/SSTableRewriter.java
+++ b/src/java/org/apache/cassandra/io/sstable/SSTableRewriter.java
@@ -59,7 +59,6 @@ public class SSTableRewriter extends Transactional.AbstractTransactional impleme
// the set of final readers we will expose on commit
private final LifecycleTransaction transaction; // the readers we are rewriting (updated as they are replaced)
private final List<SSTableReader> preparedForCommit = new ArrayList<>();
- private final Map<Descriptor, Integer> fileDescriptors = new HashMap<>(); // the file descriptors for each reader descriptor we are rewriting
private long currentlyOpenedEarlyAt; // the position (in MB) in the target file we last (re)opened at
@@ -87,8 +86,6 @@ public class SSTableRewriter extends Transactional.AbstractTransactional impleme
public SSTableRewriter(LifecycleTransaction transaction, long maxAge, boolean isOffline, long preemptiveOpenInterval, boolean keepOriginals)
{
this.transaction = transaction;
- for (SSTableReader sstable : this.transaction.originals())
- fileDescriptors.put(sstable.descriptor, CLibrary.getfd(sstable.getFilename()));
this.maxAge = maxAge;
this.isOffline = isOffline;
this.keepOriginals = keepOriginals;
@@ -160,7 +157,7 @@ public class SSTableRewriter extends Transactional.AbstractTransactional impleme
for (SSTableReader reader : transaction.originals())
{
RowIndexEntry index = reader.getPosition(key, SSTableReader.Operator.GE);
- CLibrary.trySkipCache(fileDescriptors.get(reader.descriptor), 0, index == null ? 0 : index.position, reader.getFilename());
+ CLibrary.trySkipCache(reader.getFilename(), 0, index == null ? 0 : index.position);
}
}
else
http://git-wip-us.apache.org/repos/asf/cassandra/blob/49c9c01f/src/java/org/apache/cassandra/utils/CLibrary.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/utils/CLibrary.java b/src/java/org/apache/cassandra/utils/CLibrary.java
index b4a1193..1235a58 100644
--- a/src/java/org/apache/cassandra/utils/CLibrary.java
+++ b/src/java/org/apache/cassandra/utils/CLibrary.java
@@ -17,7 +17,9 @@
*/
package org.apache.cassandra.utils;
+import java.io.File;
import java.io.FileDescriptor;
+import java.io.FileInputStream;
import java.io.IOException;
import java.lang.reflect.Field;
import java.nio.channels.FileChannel;
@@ -148,7 +150,18 @@ public final class CLibrary
public static void trySkipCache(String path, long offset, long len)
{
- trySkipCache(getfd(path), offset, len, path);
+ File f = new File(path);
+ if (!f.exists())
+ return;
+
+ try (FileInputStream fis = new FileInputStream(f))
+ {
+ trySkipCache(getfd(fis.getChannel()), offset, len, path);
+ }
+ catch (IOException e)
+ {
+ logger.warn("Could not skip cache", e);
+ }
}
public static void trySkipCache(int fd, long offset, long len, String path)
@@ -326,18 +339,4 @@ public final class CLibrary
return -1;
}
-
- public static int getfd(String path)
- {
- try(FileChannel channel = FileChannel.open(Paths.get(path), StandardOpenOption.READ))
- {
- return getfd(channel);
- }
- catch (IOException e)
- {
- JVMStabilityInspector.inspectThrowable(e);
- // ignore
- return -1;
- }
- }
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/49c9c01f/test/unit/org/apache/cassandra/utils/CLibraryTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/utils/CLibraryTest.java b/test/unit/org/apache/cassandra/utils/CLibraryTest.java
index 774ddac..7516392 100644
--- a/test/unit/org/apache/cassandra/utils/CLibraryTest.java
+++ b/test/unit/org/apache/cassandra/utils/CLibraryTest.java
@@ -31,7 +31,6 @@ public class CLibraryTest
{
File file = FileUtils.createTempFile("testSkipCache", "1");
- int fd = CLibrary.getfd(file.getPath());
- CLibrary.trySkipCache(fd, 0, 0, file.getPath());
+ CLibrary.trySkipCache(file.getPath(), 0, 0);
}
}