You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sn...@apache.org on 2016/07/05 14:22:43 UTC
cassandra git commit: Prevent key invalidation if there's no key to
invalidate
Repository: cassandra
Updated Branches:
refs/heads/trunk b2f036a15 -> c57d0d4fa
Prevent key invalidation if there's no key to invalidate
patch by Robert Stupp; reviewed by Joshua McKenzie for CASSANDRA-12062
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/c57d0d4f
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/c57d0d4f
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/c57d0d4f
Branch: refs/heads/trunk
Commit: c57d0d4fabb8b1c8b9b312010a706245a203be57
Parents: b2f036a
Author: Robert Stupp <sn...@snazy.de>
Authored: Tue Jul 5 16:21:31 2016 +0200
Committer: Robert Stupp <sn...@snazy.de>
Committed: Tue Jul 5 16:21:31 2016 +0200
----------------------------------------------------------------------
.../cassandra/io/sstable/SSTableRewriter.java | 28 ++++++++++++--------
.../io/sstable/format/SSTableReader.java | 3 ++-
2 files changed, 19 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/c57d0d4f/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 715a33a..b43d3d1 100644
--- a/src/java/org/apache/cassandra/io/sstable/SSTableRewriter.java
+++ b/src/java/org/apache/cassandra/io/sstable/SSTableRewriter.java
@@ -135,17 +135,14 @@ public class SSTableRewriter extends Transactional.AbstractTransactional impleme
RowIndexEntry index = writer.append(partition);
if (!transaction.isOffline() && index != null)
{
- boolean save = false;
for (SSTableReader reader : transaction.originals())
{
if (reader.getCachedPosition(key, false) != null)
{
- save = true;
+ cachedKeys.put(key, index);
break;
}
}
- if (save)
- cachedKeys.put(key, index);
}
return index;
}
@@ -230,13 +227,19 @@ public class SSTableRewriter extends Transactional.AbstractTransactional impleme
if (preemptiveOpenInterval == Long.MAX_VALUE)
return;
- final List<DecoratedKey> invalidateKeys = new ArrayList<>();
- invalidateKeys.addAll(cachedKeys.keySet());
newReader.setupOnline();
- for (Map.Entry<DecoratedKey, RowIndexEntry> cacheKey : cachedKeys.entrySet())
- newReader.cacheKey(cacheKey.getKey(), cacheKey.getValue());
+ List<DecoratedKey> invalidateKeys = null;
+ if (!cachedKeys.isEmpty())
+ {
+ invalidateKeys = new ArrayList<>(cachedKeys.size());
+ for (Map.Entry<DecoratedKey, RowIndexEntry> cacheKey : cachedKeys.entrySet())
+ {
+ invalidateKeys.add(cacheKey.getKey());
+ newReader.cacheKey(cacheKey.getKey(), cacheKey.getValue());
+ }
+ }
- cachedKeys = new HashMap<>();
+ cachedKeys.clear();
for (SSTableReader sstable : transaction.originals())
{
// we call getCurrentReplacement() to support multiple rewriters operating over the same source readers at once.
@@ -247,12 +250,15 @@ public class SSTableRewriter extends Transactional.AbstractTransactional impleme
if (latest.first.compareTo(lowerbound) > 0)
continue;
- Runnable runOnClose = new InvalidateKeys(latest, invalidateKeys);
+ Runnable runOnClose = invalidateKeys != null ? new InvalidateKeys(latest, invalidateKeys) : null;
if (lowerbound.compareTo(latest.last) >= 0)
{
if (!transaction.isObsolete(latest))
{
- latest.runOnClose(runOnClose);
+ if (runOnClose != null)
+ {
+ latest.runOnClose(runOnClose);
+ }
transaction.obsolete(latest);
}
continue;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/c57d0d4f/src/java/org/apache/cassandra/io/sstable/format/SSTableReader.java
----------------------------------------------------------------------
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 d11e057..91b71cc 100644
--- a/src/java/org/apache/cassandra/io/sstable/format/SSTableReader.java
+++ b/src/java/org/apache/cassandra/io/sstable/format/SSTableReader.java
@@ -1065,7 +1065,8 @@ public abstract class SSTableReader extends SSTable implements SelfRefCounted<SS
if (ifile != null)
ifile.dropPageCache(ifilePosition);
- andThen.run();
+ if (andThen != null)
+ andThen.run();
}
}