Repository: cassandra
Updated Branches:
  refs/heads/trunk 6633421dd -> bee474626


Check for overlap with non-early opened files in LCS

patch by marcuse; reviewed by carlyeks for CASSANDRA-8739


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/ff14d7ab
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/ff14d7ab
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/ff14d7ab

Branch: refs/heads/trunk
Commit: ff14d7ab8d66c7665d0a5d6c87fb8efac35b0d13
Parents: fd0bdef
Author: Marcus Eriksson <[email protected]>
Authored: Thu Feb 5 13:43:31 2015 +0100
Committer: Marcus Eriksson <[email protected]>
Committed: Mon Mar 23 09:24:38 2015 +0100

----------------------------------------------------------------------
 CHANGES.txt                                         |  1 +
 .../cassandra/db/compaction/LeveledManifest.java    | 16 +++++++++++++++-
 2 files changed, 16 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/ff14d7ab/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 25b0a06..924bdcf 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 2.1.4
+ * Check for overlap with non-early sstables in LCS (CASSANDRA-8739)
  * Only calculate max purgable timestamp if we have to (CASSANDRA-8914)
  * (cqlsh) Greatly improve performance of COPY FROM (CASSANDRA-8225)
  * IndexSummary effectiveIndexInterval is now a guideline, not a rule 
(CASSANDRA-8993)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/ff14d7ab/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java 
b/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java
index c076a64..ecebfe0 100644
--- a/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java
+++ b/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java
@@ -534,7 +534,7 @@ public class LeveledManifest
 
         if (level == 0)
         {
-            Set<SSTableReader> compactingL0 = 
ImmutableSet.copyOf(Iterables.filter(getLevel(0), Predicates.in(compacting)));
+            Set<SSTableReader> compactingL0 = getCompacting(0);
 
             RowPosition lastCompactingKey = null;
             RowPosition firstCompactingKey = null;
@@ -595,6 +595,8 @@ public class LeveledManifest
                 Set<SSTableReader> l1overlapping = overlapping(candidates, 
getLevel(1));
                 if (Sets.intersection(l1overlapping, compacting).size() > 0)
                     return Collections.emptyList();
+                if (!overlapping(candidates, compactingL0).isEmpty())
+                    return Collections.emptyList();
                 candidates = Sets.union(candidates, l1overlapping);
             }
             if (candidates.size() < 2)
@@ -632,6 +634,18 @@ public class LeveledManifest
         return Collections.emptyList();
     }
 
+    private Set<SSTableReader> getCompacting(int level)
+    {
+        Set<SSTableReader> sstables = new HashSet<>();
+        Set<SSTableReader> levelSSTables = new HashSet<>(getLevel(level));
+        for (SSTableReader sstable : cfs.getDataTracker().getCompacting())
+        {
+            if (levelSSTables.contains(sstable))
+                sstables.add(sstable);
+        }
+        return sstables;
+    }
+
     private List<SSTableReader> ageSortedSSTables(Collection<SSTableReader> 
candidates)
     {
         List<SSTableReader> ageSortedCandidates = new 
ArrayList<SSTableReader>(candidates);

Reply via email to