[5/6] git commit: L0 contents are overlapping (fix for #4142)

2012-05-09 Thread jbellis
L0 contents are overlapping (fix for #4142)


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

Branch: refs/heads/trunk
Commit: aead8da91a81e4f3b4ad21d3d53157846d7fbb36
Parents: 146f4bd
Author: Jonathan Ellis jbel...@apache.org
Authored: Wed May 9 14:01:18 2012 -0500
Committer: Jonathan Ellis jbel...@apache.org
Committed: Wed May 9 14:52:04 2012 -0500

--
 .../db/compaction/LeveledCompactionStrategy.java   |   30 ++-
 1 files changed, 20 insertions(+), 10 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/cassandra/blob/aead8da9/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java
--
diff --git 
a/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java 
b/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java
index 361c333..939fdc6 100644
--- a/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java
+++ b/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java
@@ -27,6 +27,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.cassandra.db.ColumnFamilyStore;
+import org.apache.cassandra.db.DecoratedKey;
 import org.apache.cassandra.db.columniterator.IColumnIterator;
 import org.apache.cassandra.dht.Range;
 import org.apache.cassandra.dht.Token;
@@ -170,8 +171,20 @@ public class LeveledCompactionStrategy extends 
AbstractCompactionStrategy implem
 byLevel.get(manifest.levelOf(sstable)).add(sstable);
 
 ListICompactionScanner scanners = new 
ArrayListICompactionScanner(sstables.size());
-for (Integer level : ImmutableSortedSet.copyOf(byLevel.keySet()))
-scanners.add(new LeveledScanner(new 
ArrayListSSTableReader(byLevel.get(level)), range));
+for (Integer level : byLevel.keySet())
+{
+if (level == 0)
+{
+// L0 makes no guarantees about overlapping-ness.  Just create 
a direct scanner for each
+for (SSTableReader sstable : byLevel.get(level))
+scanners.add(sstable.getDirectScanner(range));
+}
+else
+{
+// Create a LeveledScanner that only opens one sstable at a 
time, in sorted order
+scanners.add(new LeveledScanner(byLevel.get(level), range));
+}
+}
 
 return scanners;
 }
@@ -188,14 +201,12 @@ public class LeveledCompactionStrategy extends 
AbstractCompactionStrategy implem
 private SSTableScanner currentScanner;
 private long positionOffset;
 
-public LeveledScanner(ListSSTableReader sstables, RangeToken range)
+public LeveledScanner(CollectionSSTableReader sstables, RangeToken 
range)
 {
 this.range = range;
-this.sstables = sstables;
-
-// Sorting a list we got in argument is bad but it's all private 
to this class so let's not bother
-Collections.sort(sstables, SSTable.sstableComparator);
-this.sstableIterator = sstables.iterator();
+this.sstables = new ArrayListSSTableReader(sstables);
+Collections.sort(this.sstables, SSTable.sstableComparator);
+this.sstableIterator = this.sstables.iterator();
 
 long length = 0;
 for (SSTableReader sstable : sstables)
@@ -225,8 +236,7 @@ public class LeveledCompactionStrategy extends 
AbstractCompactionStrategy implem
 if (!sstableIterator.hasNext())
 return endOfData();
 
-SSTableReader reader = sstableIterator.next();
-currentScanner = reader.getDirectScanner(range);
+currentScanner = 
sstableIterator.next().getDirectScanner(range);
 return computeNext();
 }
 catch (IOException e)



[5/6] git commit: L0 contents are overlapping (fix for #4142)

2012-05-09 Thread jbellis
L0 contents are overlapping (fix for #4142)


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

Branch: refs/heads/trunk
Commit: 67ed39fa9bf71be4cfc13fccbdd7b76dcb46c062
Parents: d4ec6d2
Author: Jonathan Ellis jbel...@apache.org
Authored: Wed May 9 14:01:18 2012 -0500
Committer: Jonathan Ellis jbel...@apache.org
Committed: Wed May 9 14:52:17 2012 -0500

--
 .../db/compaction/LeveledCompactionStrategy.java   |   30 ++-
 1 files changed, 20 insertions(+), 10 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/cassandra/blob/67ed39fa/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java
--
diff --git 
a/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java 
b/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java
index 1bc40fd..858a2bc 100644
--- a/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java
+++ b/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java
@@ -31,6 +31,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.cassandra.db.ColumnFamilyStore;
+import org.apache.cassandra.db.DecoratedKey;
 import org.apache.cassandra.db.columniterator.IColumnIterator;
 import org.apache.cassandra.dht.Range;
 import org.apache.cassandra.dht.Token;
@@ -174,8 +175,20 @@ public class LeveledCompactionStrategy extends 
AbstractCompactionStrategy implem
 byLevel.get(manifest.levelOf(sstable)).add(sstable);
 
 ListICompactionScanner scanners = new 
ArrayListICompactionScanner(sstables.size());
-for (Integer level : ImmutableSortedSet.copyOf(byLevel.keySet()))
-scanners.add(new LeveledScanner(new 
ArrayListSSTableReader(byLevel.get(level)), range));
+for (Integer level : byLevel.keySet())
+{
+if (level == 0)
+{
+// L0 makes no guarantees about overlapping-ness.  Just create 
a direct scanner for each
+for (SSTableReader sstable : byLevel.get(level))
+scanners.add(sstable.getDirectScanner(range));
+}
+else
+{
+// Create a LeveledScanner that only opens one sstable at a 
time, in sorted order
+scanners.add(new LeveledScanner(byLevel.get(level), range));
+}
+}
 
 return scanners;
 }
@@ -192,14 +205,12 @@ public class LeveledCompactionStrategy extends 
AbstractCompactionStrategy implem
 private SSTableScanner currentScanner;
 private long positionOffset;
 
-public LeveledScanner(ListSSTableReader sstables, RangeToken range)
+public LeveledScanner(CollectionSSTableReader sstables, RangeToken 
range)
 {
 this.range = range;
-this.sstables = sstables;
-
-// Sorting a list we got in argument is bad but it's all private 
to this class so let's not bother
-Collections.sort(sstables, SSTable.sstableComparator);
-this.sstableIterator = sstables.iterator();
+this.sstables = new ArrayListSSTableReader(sstables);
+Collections.sort(this.sstables, SSTable.sstableComparator);
+this.sstableIterator = this.sstables.iterator();
 
 long length = 0;
 for (SSTableReader sstable : sstables)
@@ -229,8 +240,7 @@ public class LeveledCompactionStrategy extends 
AbstractCompactionStrategy implem
 if (!sstableIterator.hasNext())
 return endOfData();
 
-SSTableReader reader = sstableIterator.next();
-currentScanner = reader.getDirectScanner(range);
+currentScanner = 
sstableIterator.next().getDirectScanner(range);
 return computeNext();
 }
 catch (IOException e)