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(); } }