[2/2] git commit: Ensure compacted sstables are never used

2012-07-26 Thread slebresne
Ensure compacted sstables are never used

patch by slebresne; reviewed by jbellis for CASSANDRA-4436


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

Branch: refs/heads/trunk
Commit: 6a6b7ec1f00d8084fb29379111a798c09c35e6d6
Parents: cc0be1b
Author: Sylvain Lebresne 
Authored: Wed Jul 18 19:54:20 2012 +0200
Committer: Sylvain Lebresne 
Committed: Thu Jul 26 17:46:19 2012 +0200

--
 CHANGES.txt|1 +
 .../org/apache/cassandra/db/ColumnFamilyStore.java |   32 ++--
 .../org/apache/cassandra/io/sstable/Component.java |2 +
 .../apache/cassandra/io/sstable/Descriptor.java|   10 +++-
 .../org/apache/cassandra/io/sstable/SSTable.java   |2 +
 .../cassandra/io/sstable/SSTableMetadata.java  |   35 +
 .../apache/cassandra/io/sstable/SSTableReader.java |   39 +--
 7 files changed, 80 insertions(+), 41 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a6b7ec1/CHANGES.txt
--
diff --git a/CHANGES.txt b/CHANGES.txt
index 169f66d..84db73d 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -19,6 +19,7 @@
  * fix "Can't Modify Index Name" problem on CF update (CASSANDRA-4439)
  * Fix assertion error in getOverlappingSSTables during repair (CASSANDRA-4456)
  * fix nodetool's setcompactionthreshold command (CASSANDRA-4455)
+ * Ensure compacted files are never used, to avoid counter overcount 
(CASSANDRA-4436)
 Merged from 1.0:
  * allow dropping columns shadowed by not-yet-expired supercolumn or row
tombstones in PrecompactedRow (CASSANDRA-4396)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a6b7ec1/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
--
diff --git a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java 
b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
index b93adc1..a39530a 100644
--- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
+++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
@@ -234,8 +234,23 @@ public class ColumnFamilyStore implements 
ColumnFamilyStoreMBean
 
 if (loadSSTables)
 {
-Directories.SSTableLister sstables = 
directories.sstableLister().skipCompacted(true).skipTemporary(true);
-
data.addInitialSSTables(SSTableReader.batchOpen(sstables.list().entrySet(), 
savedKeys, data, metadata, this.partitioner));
+Directories.SSTableLister sstableFiles = 
directories.sstableLister().skipCompacted(true).skipTemporary(true);
+Collection sstables = 
SSTableReader.batchOpen(sstableFiles.list().entrySet(), savedKeys, data, 
metadata, this.partitioner);
+
+// Filter non-compacted sstables, remove compacted ones
+Set compactedSSTables = new HashSet();
+for (SSTableReader sstable : sstables)
+compactedSSTables.addAll(sstable.getAncestors());
+
+Set liveSSTables = new HashSet();
+for (SSTableReader sstable : sstables)
+{
+if (compactedSSTables.contains(sstable.descriptor.generation))
+sstable.releaseReference(); // this amount to deleting the 
sstable
+else
+liveSSTables.add(sstable);
+}
+data.addInitialSSTables(liveSSTables);
 }
 
 // compaction strategy should be created after the CFS has been 
prepared
@@ -492,7 +507,7 @@ public class ColumnFamilyStore implements 
ColumnFamilyStoreMBean
 SSTableReader reader;
 try
 {
-reader = SSTableReader.open(newDescriptor, entry.getValue(), 
Collections.emptySet(), data, metadata, partitioner);
+reader = SSTableReader.open(newDescriptor, entry.getValue(), 
Collections.emptySet(), metadata, partitioner);
 }
 catch (IOException e)
 {
@@ -1969,9 +1984,18 @@ public class ColumnFamilyStore implements 
ColumnFamilyStoreMBean
 ReplayPosition rp = ReplayPosition.getReplayPosition(sstables);
 SSTableMetadata.Collector sstableMetadataCollector = 
SSTableMetadata.createCollector().replayPosition(rp);
 
-// get the max timestamp of the precompacted sstables
+// Get the max timestamp of the precompacted sstables
+// and adds generation of live ancestors
 for (SSTableReader sstable : sstables)
+{
 
sstableMetadataCollector.updateMaxTimestamp(sstable.getMaxTimestamp());
+
sstableMetadataCollector.addAnces

git commit: Ensure compacted sstables are never used

2012-07-26 Thread slebresne
Updated Branches:
  refs/heads/cassandra-1.1 cc0be1b40 -> 6a6b7ec1f


Ensure compacted sstables are never used

patch by slebresne; reviewed by jbellis for CASSANDRA-4436


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

Branch: refs/heads/cassandra-1.1
Commit: 6a6b7ec1f00d8084fb29379111a798c09c35e6d6
Parents: cc0be1b
Author: Sylvain Lebresne 
Authored: Wed Jul 18 19:54:20 2012 +0200
Committer: Sylvain Lebresne 
Committed: Thu Jul 26 17:46:19 2012 +0200

--
 CHANGES.txt|1 +
 .../org/apache/cassandra/db/ColumnFamilyStore.java |   32 ++--
 .../org/apache/cassandra/io/sstable/Component.java |2 +
 .../apache/cassandra/io/sstable/Descriptor.java|   10 +++-
 .../org/apache/cassandra/io/sstable/SSTable.java   |2 +
 .../cassandra/io/sstable/SSTableMetadata.java  |   35 +
 .../apache/cassandra/io/sstable/SSTableReader.java |   39 +--
 7 files changed, 80 insertions(+), 41 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a6b7ec1/CHANGES.txt
--
diff --git a/CHANGES.txt b/CHANGES.txt
index 169f66d..84db73d 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -19,6 +19,7 @@
  * fix "Can't Modify Index Name" problem on CF update (CASSANDRA-4439)
  * Fix assertion error in getOverlappingSSTables during repair (CASSANDRA-4456)
  * fix nodetool's setcompactionthreshold command (CASSANDRA-4455)
+ * Ensure compacted files are never used, to avoid counter overcount 
(CASSANDRA-4436)
 Merged from 1.0:
  * allow dropping columns shadowed by not-yet-expired supercolumn or row
tombstones in PrecompactedRow (CASSANDRA-4396)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6a6b7ec1/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
--
diff --git a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java 
b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
index b93adc1..a39530a 100644
--- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
+++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
@@ -234,8 +234,23 @@ public class ColumnFamilyStore implements 
ColumnFamilyStoreMBean
 
 if (loadSSTables)
 {
-Directories.SSTableLister sstables = 
directories.sstableLister().skipCompacted(true).skipTemporary(true);
-
data.addInitialSSTables(SSTableReader.batchOpen(sstables.list().entrySet(), 
savedKeys, data, metadata, this.partitioner));
+Directories.SSTableLister sstableFiles = 
directories.sstableLister().skipCompacted(true).skipTemporary(true);
+Collection sstables = 
SSTableReader.batchOpen(sstableFiles.list().entrySet(), savedKeys, data, 
metadata, this.partitioner);
+
+// Filter non-compacted sstables, remove compacted ones
+Set compactedSSTables = new HashSet();
+for (SSTableReader sstable : sstables)
+compactedSSTables.addAll(sstable.getAncestors());
+
+Set liveSSTables = new HashSet();
+for (SSTableReader sstable : sstables)
+{
+if (compactedSSTables.contains(sstable.descriptor.generation))
+sstable.releaseReference(); // this amount to deleting the 
sstable
+else
+liveSSTables.add(sstable);
+}
+data.addInitialSSTables(liveSSTables);
 }
 
 // compaction strategy should be created after the CFS has been 
prepared
@@ -492,7 +507,7 @@ public class ColumnFamilyStore implements 
ColumnFamilyStoreMBean
 SSTableReader reader;
 try
 {
-reader = SSTableReader.open(newDescriptor, entry.getValue(), 
Collections.emptySet(), data, metadata, partitioner);
+reader = SSTableReader.open(newDescriptor, entry.getValue(), 
Collections.emptySet(), metadata, partitioner);
 }
 catch (IOException e)
 {
@@ -1969,9 +1984,18 @@ public class ColumnFamilyStore implements 
ColumnFamilyStoreMBean
 ReplayPosition rp = ReplayPosition.getReplayPosition(sstables);
 SSTableMetadata.Collector sstableMetadataCollector = 
SSTableMetadata.createCollector().replayPosition(rp);
 
-// get the max timestamp of the precompacted sstables
+// Get the max timestamp of the precompacted sstables
+// and adds generation of live ancestors
 for (SSTableReader sstable : sstables)
+{
 
sstableMetadataCollector.updateMaxTimesta