You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ma...@apache.org on 2015/09/10 14:44:34 UTC
[1/3] cassandra git commit: Fix sstable selection when anticompacting
Repository: cassandra
Updated Branches:
refs/heads/cassandra-3.0 83248186a -> 9f0509ee3
Fix sstable selection when anticompacting
Patch by Marcus Olsson; reviewed by marcuse for CASSANDRA-10299
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/9dd84713
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/9dd84713
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/9dd84713
Branch: refs/heads/cassandra-3.0
Commit: 9dd847135ffdde384b48bdb8a147b27d8bb8b6a4
Parents: acc08ae
Author: Marcus Olsson <ma...@ericsson.com>
Authored: Thu Sep 10 11:43:26 2015 +0200
Committer: Marcus Eriksson <ma...@apache.org>
Committed: Thu Sep 10 14:32:41 2015 +0200
----------------------------------------------------------------------
.../db/compaction/CompactionManager.java | 28 +++++++++++++-------
.../db/compaction/AntiCompactionTest.java | 2 +-
2 files changed, 19 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/9dd84713/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
index 5d88a11..e60675a 100644
--- a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
+++ b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
@@ -440,12 +440,18 @@ public class CompactionManager implements CompactionManagerMBean
Iterator<SSTableReader> sstableIterator = sstables.iterator();
try
{
+ List<Range<Token>> normalizedRanges = Range.normalize(ranges);
+
while (sstableIterator.hasNext())
{
SSTableReader sstable = sstableIterator.next();
- for (Range<Token> r : Range.normalize(ranges))
+
+ Range<Token> sstableRange = new Range<>(sstable.first.getToken(), sstable.last.getToken(), sstable.partitioner);
+
+ boolean shouldAnticompact = false;
+
+ for (Range<Token> r : normalizedRanges)
{
- Range<Token> sstableRange = new Range<>(sstable.first.getToken(), sstable.last.getToken(), sstable.partitioner);
if (r.contains(sstableRange))
{
logger.info("SSTable {} fully contained in range {}, mutating repairedAt instead of anticompacting", sstable, r);
@@ -453,20 +459,22 @@ public class CompactionManager implements CompactionManagerMBean
sstable.reloadSSTableMetadata();
mutatedRepairStatuses.add(sstable);
sstableIterator.remove();
+ shouldAnticompact = true;
break;
}
- else if (!sstableRange.intersects(r))
- {
- logger.info("SSTable {} ({}) does not intersect repaired range {}, not touching repairedAt.", sstable, sstableRange, r);
- nonAnticompacting.add(sstable);
- sstableIterator.remove();
- break;
- }
- else
+ else if (sstableRange.intersects(r))
{
logger.info("SSTable {} ({}) will be anticompacted on range {}", sstable, sstableRange, r);
+ shouldAnticompact = true;
}
}
+
+ if (!shouldAnticompact)
+ {
+ logger.info("SSTable {} ({}) does not intersect repaired ranges {}, not touching repairedAt.", sstable, sstableRange, normalizedRanges);
+ nonAnticompacting.add(sstable);
+ sstableIterator.remove();
+ }
}
cfs.getDataTracker().notifySSTableRepairedStatusChanged(mutatedRepairStatuses);
cfs.getDataTracker().unmarkCompacting(Sets.union(nonAnticompacting, mutatedRepairStatuses));
http://git-wip-us.apache.org/repos/asf/cassandra/blob/9dd84713/test/unit/org/apache/cassandra/db/compaction/AntiCompactionTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/compaction/AntiCompactionTest.java b/test/unit/org/apache/cassandra/db/compaction/AntiCompactionTest.java
index 7756abe..56af801 100644
--- a/test/unit/org/apache/cassandra/db/compaction/AntiCompactionTest.java
+++ b/test/unit/org/apache/cassandra/db/compaction/AntiCompactionTest.java
@@ -148,7 +148,7 @@ public class AntiCompactionTest extends SchemaLoader
ColumnFamilyStore store = prepareColumnFamilyStore();
Collection<SSTableReader> sstables = store.getUnrepairedSSTables();
assertEquals(store.getSSTables().size(), sstables.size());
- Range<Token> range = new Range<Token>(new BytesToken("-10".getBytes()), new BytesToken("-1".getBytes()));
+ Range<Token> range = new Range<Token>(new BytesToken("-1".getBytes()), new BytesToken("-10".getBytes()));
List<Range<Token>> ranges = Arrays.asList(range);
Refs<SSTableReader> refs = Refs.tryRef(sstables);
[3/3] cassandra git commit: Merge branch 'cassandra-2.2' into
cassandra-3.0
Posted by ma...@apache.org.
Merge branch 'cassandra-2.2' into cassandra-3.0
Conflicts:
test/unit/org/apache/cassandra/db/compaction/AntiCompactionTest.java
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/9f0509ee
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/9f0509ee
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/9f0509ee
Branch: refs/heads/cassandra-3.0
Commit: 9f0509ee358e0fa1e4eafd53015ea534ec212ccf
Parents: 8324818 362da9b
Author: Marcus Eriksson <ma...@apache.org>
Authored: Thu Sep 10 14:39:01 2015 +0200
Committer: Marcus Eriksson <ma...@apache.org>
Committed: Thu Sep 10 14:39:01 2015 +0200
----------------------------------------------------------------------
.../db/compaction/CompactionManager.java | 28 +++++++++++++-------
.../db/compaction/AntiCompactionTest.java | 4 +--
2 files changed, 20 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/9f0509ee/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/9f0509ee/test/unit/org/apache/cassandra/db/compaction/AntiCompactionTest.java
----------------------------------------------------------------------
diff --cc test/unit/org/apache/cassandra/db/compaction/AntiCompactionTest.java
index a3167f9,7c3fbc2..cd82b19
--- a/test/unit/org/apache/cassandra/db/compaction/AntiCompactionTest.java
+++ b/test/unit/org/apache/cassandra/db/compaction/AntiCompactionTest.java
@@@ -299,21 -289,21 +299,21 @@@ public class AntiCompactionTes
{
generateSStable(store,Integer.toString(table));
}
- Collection<SSTableReader> sstables = store.getUnrepairedSSTables();
- assertEquals(store.getSSTables().size(), sstables.size());
-
+ Collection<SSTableReader> sstables = getUnrepairedSSTables(store);
+ assertEquals(store.getLiveSSTables().size(), sstables.size());
+
- Range<Token> range = new Range<Token>(new BytesToken("-10".getBytes()), new BytesToken("-1".getBytes()));
+ Range<Token> range = new Range<Token>(new BytesToken("-1".getBytes()), new BytesToken("-10".getBytes()));
List<Range<Token>> ranges = Arrays.asList(range);
try (LifecycleTransaction txn = store.getTracker().tryModify(sstables, OperationType.ANTICOMPACTION);
Refs<SSTableReader> refs = Refs.ref(sstables))
{
- CompactionManager.instance.performAnticompaction(store, ranges, refs, txn, 0);
+ CompactionManager.instance.performAnticompaction(store, ranges, refs, txn, 1);
}
- assertThat(store.getSSTables().size(), is(10));
- assertThat(Iterables.get(store.getSSTables(), 0).isRepaired(), is(false));
+ assertThat(store.getLiveSSTables().size(), is(10));
+ assertThat(Iterables.get(store.getLiveSSTables(), 0).isRepaired(), is(false));
}
private ColumnFamilyStore prepareColumnFamilyStore()
[2/3] cassandra git commit: Merge branch 'cassandra-2.1' into
cassandra-2.2
Posted by ma...@apache.org.
Merge branch 'cassandra-2.1' into cassandra-2.2
Conflicts:
src/java/org/apache/cassandra/db/compaction/CompactionManager.java
test/unit/org/apache/cassandra/db/compaction/AntiCompactionTest.java
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/362da9bb
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/362da9bb
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/362da9bb
Branch: refs/heads/cassandra-3.0
Commit: 362da9bbc1cf64be0c6ec373e6602822b1138173
Parents: b22ad42 9dd8471
Author: Marcus Eriksson <ma...@apache.org>
Authored: Thu Sep 10 14:35:37 2015 +0200
Committer: Marcus Eriksson <ma...@apache.org>
Committed: Thu Sep 10 14:35:37 2015 +0200
----------------------------------------------------------------------
.../db/compaction/CompactionManager.java | 28 +++++++++++++-------
.../db/compaction/AntiCompactionTest.java | 4 +--
2 files changed, 20 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/362da9bb/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/compaction/CompactionManager.java
index 495c5ab,e60675a..7def98d
--- a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
+++ b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
@@@ -471,9 -445,13 +473,13 @@@ public class CompactionManager implemen
while (sstableIterator.hasNext())
{
SSTableReader sstable = sstableIterator.next();
- for (Range<Token> r : Range.normalize(ranges))
+
- Range<Token> sstableRange = new Range<>(sstable.first.getToken(), sstable.last.getToken(), sstable.partitioner);
++ Range<Token> sstableRange = new Range<>(sstable.first.getToken(), sstable.last.getToken());
+
+ boolean shouldAnticompact = false;
+
+ for (Range<Token> r : normalizedRanges)
{
- Range<Token> sstableRange = new Range<>(sstable.first.getToken(), sstable.last.getToken());
if (r.contains(sstableRange))
{
logger.info("SSTable {} fully contained in range {}, mutating repairedAt instead of anticompacting", sstable, r);
@@@ -481,28 -459,28 +487,30 @@@
sstable.reloadSSTableMetadata();
mutatedRepairStatuses.add(sstable);
sstableIterator.remove();
+ shouldAnticompact = true;
break;
}
- else if (!sstableRange.intersects(r))
- {
- logger.info("SSTable {} ({}) does not intersect repaired range {}, not touching repairedAt.", sstable, sstableRange, r);
- nonAnticompacting.add(sstable);
- sstableIterator.remove();
- break;
- }
- else
+ else if (sstableRange.intersects(r))
{
logger.info("SSTable {} ({}) will be anticompacted on range {}", sstable, sstableRange, r);
+ shouldAnticompact = true;
}
}
+
+ if (!shouldAnticompact)
+ {
+ logger.info("SSTable {} ({}) does not intersect repaired ranges {}, not touching repairedAt.", sstable, sstableRange, normalizedRanges);
+ nonAnticompacting.add(sstable);
+ sstableIterator.remove();
+ }
}
- cfs.getDataTracker().notifySSTableRepairedStatusChanged(mutatedRepairStatuses);
- cfs.getDataTracker().unmarkCompacting(Sets.union(nonAnticompacting, mutatedRepairStatuses));
+ cfs.getTracker().notifySSTableRepairedStatusChanged(mutatedRepairStatuses);
+ txn.cancel(Sets.union(nonAnticompacting, mutatedRepairStatuses));
validatedForRepair.release(Sets.union(nonAnticompacting, mutatedRepairStatuses));
+ assert txn.originals().equals(sstables);
if (!sstables.isEmpty())
- doAntiCompaction(cfs, ranges, sstables, repairedAt);
+ doAntiCompaction(cfs, ranges, txn, repairedAt);
+ txn.finish();
}
finally
{
http://git-wip-us.apache.org/repos/asf/cassandra/blob/362da9bb/test/unit/org/apache/cassandra/db/compaction/AntiCompactionTest.java
----------------------------------------------------------------------
diff --cc test/unit/org/apache/cassandra/db/compaction/AntiCompactionTest.java
index 235462b,56af801..7c3fbc2
--- a/test/unit/org/apache/cassandra/db/compaction/AntiCompactionTest.java
+++ b/test/unit/org/apache/cassandra/db/compaction/AntiCompactionTest.java
@@@ -278,34 -179,6 +278,34 @@@ public class AntiCompactionTes
}
+ @Test
+ public void shouldSkipAntiCompactionForNonIntersectingRange() throws InterruptedException, IOException
+ {
+ Keyspace keyspace = Keyspace.open(KEYSPACE1);
+ ColumnFamilyStore store = keyspace.getColumnFamilyStore(CF);
+ store.disableAutoCompaction();
+
+ for (int table = 0; table < 10; table++)
+ {
+ generateSStable(store,Integer.toString(table));
+ }
+ Collection<SSTableReader> sstables = store.getUnrepairedSSTables();
+ assertEquals(store.getSSTables().size(), sstables.size());
+
- Range<Token> range = new Range<Token>(new BytesToken("-10".getBytes()), new BytesToken("-1".getBytes()));
++ Range<Token> range = new Range<Token>(new BytesToken("-1".getBytes()), new BytesToken("-10".getBytes()));
+ List<Range<Token>> ranges = Arrays.asList(range);
+
+
+ try (LifecycleTransaction txn = store.getTracker().tryModify(sstables, OperationType.ANTICOMPACTION);
+ Refs<SSTableReader> refs = Refs.ref(sstables))
+ {
- CompactionManager.instance.performAnticompaction(store, ranges, refs, txn, 0);
++ CompactionManager.instance.performAnticompaction(store, ranges, refs, txn, 1);
+ }
+
+ assertThat(store.getSSTables().size(), is(10));
+ assertThat(Iterables.get(store.getSSTables(), 0).isRepaired(), is(false));
+ }
+
private ColumnFamilyStore prepareColumnFamilyStore()
{
Keyspace keyspace = Keyspace.open(KEYSPACE1);