Repository: cassandra Updated Branches: refs/heads/cassandra-2.1 fd0bdef5a -> ff14d7ab8
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/cassandra-2.1 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);
