Merge branch 'cassandra-2.1' into trunk
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/e1651cb0
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/e1651cb0
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/e1651cb0
Branch: refs/heads/trunk
Commit: e1651cb07b7de35a2b7076b4b1c82572fee5ad63
Parents: bd889dc 4f3a9c0
Author: Mikhail Stepura <[email protected]>
Authored: Sat Sep 6 17:20:24 2014 -0700
Committer: Mikhail Stepura <[email protected]>
Committed: Sat Sep 6 17:20:24 2014 -0700
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../db/compaction/CompactionManager.java | 1 +
.../db/compaction/AntiCompactionTest.java | 49 ++++++++++++++++----
3 files changed, 41 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/e1651cb0/CHANGES.txt
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/e1651cb0/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/e1651cb0/test/unit/org/apache/cassandra/db/compaction/AntiCompactionTest.java
----------------------------------------------------------------------
diff --cc test/unit/org/apache/cassandra/db/compaction/AntiCompactionTest.java
index f632a65,6e1ac5f..cd5dc7f
--- a/test/unit/org/apache/cassandra/db/compaction/AntiCompactionTest.java
+++ b/test/unit/org/apache/cassandra/db/compaction/AntiCompactionTest.java
@@@ -23,15 -29,8 +29,9 @@@ import java.util.Collection
import java.util.List;
import java.util.concurrent.ExecutionException;
- import org.apache.cassandra.config.KSMetaData;
- import org.apache.cassandra.exceptions.ConfigurationException;
- import org.apache.cassandra.locator.SimpleStrategy;
- import org.junit.BeforeClass;
- import org.junit.After;
- import org.junit.Test;
-
import org.apache.cassandra.SchemaLoader;
import org.apache.cassandra.Util;
++import org.apache.cassandra.config.KSMetaData;
import org.apache.cassandra.db.ColumnFamilyStore;
import org.apache.cassandra.db.DecoratedKey;
import org.apache.cassandra.db.Keyspace;
@@@ -39,39 -38,20 +39,44 @@@ import org.apache.cassandra.db.Mutation
import org.apache.cassandra.dht.BytesToken;
import org.apache.cassandra.dht.Range;
import org.apache.cassandra.dht.Token;
++import org.apache.cassandra.exceptions.ConfigurationException;
import org.apache.cassandra.io.sstable.SSTableIdentityIterator;
import org.apache.cassandra.io.sstable.SSTableReader;
import org.apache.cassandra.io.sstable.SSTableScanner;
++import org.apache.cassandra.locator.SimpleStrategy;
+import org.apache.cassandra.service.ActiveRepairService;
import org.apache.cassandra.utils.ByteBufferUtil;
- import static junit.framework.Assert.assertFalse;
- import static org.junit.Assert.assertEquals;
- import static org.junit.Assert.assertTrue;
++
+ import org.junit.After;
++import org.junit.BeforeClass;
+ import org.junit.Test;
+
+ import com.google.common.collect.Iterables;
-public class AntiCompactionTest extends SchemaLoader
+public class AntiCompactionTest
{
- private static final String KEYSPACE1 = "Keyspace1";
+ private static final String KEYSPACE1 = "AntiCompactionTest";
private static final String CF = "Standard1";
+
+ @BeforeClass
+ public static void defineSchema() throws ConfigurationException
+ {
+ SchemaLoader.prepareServer();
+ SchemaLoader.createKeyspace(KEYSPACE1,
+ SimpleStrategy.class,
+ KSMetaData.optsWithRF(1),
+ SchemaLoader.standardCFMD(KEYSPACE1, CF));
+ }
+
+ @After
+ public void truncateCF()
+ {
+ Keyspace keyspace = Keyspace.open(KEYSPACE1);
+ ColumnFamilyStore store = keyspace.getColumnFamilyStore(CF);
+ store.truncateBlocking();
+ }
+
@Test
public void antiCompactOne() throws InterruptedException,
ExecutionException, IOException
{
@@@ -157,50 -110,28 +162,74 @@@
{
Keyspace keyspace = Keyspace.open(KEYSPACE1);
ColumnFamilyStore store = keyspace.getColumnFamilyStore(CF);
+ store.setCompactionStrategyClass(compactionStrategy);
store.disableAutoCompaction();
- long timestamp = System.currentTimeMillis();
- for (int i = 0; i < 10; i++)
+
+ for (int table = 0; table < 10; table++)
{
- DecoratedKey key = Util.dk(Integer.toString(i));
- Mutation rm = new Mutation(KEYSPACE1, key.getKey());
- for (int j = 0; j < 10; j++)
- rm.add("Standard1", Util.cellname(Integer.toString(j)),
- ByteBufferUtil.EMPTY_BYTE_BUFFER,
- timestamp,
- 0);
- rm.apply();
+ generateSStable(store,Integer.toString(table));
}
- store.forceBlockingFlush();
- return store;
+ Collection<SSTableReader> sstables = store.getUnrepairedSSTables();
+ assertEquals(store.getSSTables().size(), sstables.size());
+
+ Range<Token> range = new Range<Token>(new BytesToken("0".getBytes()),
new BytesToken("4".getBytes()));
+ List<Range<Token>> ranges = Arrays.asList(range);
+
+ SSTableReader.acquireReferences(sstables);
+ long repairedAt = 1000;
+ CompactionManager.instance.performAnticompaction(store, ranges,
sstables, repairedAt);
+ /*
+ Anticompaction will be anti-compacting 10 SSTables but will be doing
this two at a time
+ so there will be no net change in the number of sstables
+ */
+ assertEquals(10, store.getSSTables().size());
+ int repairedKeys = 0;
+ int nonRepairedKeys = 0;
+ for (SSTableReader sstable : store.getSSTables())
+ {
+ SSTableScanner scanner = sstable.getScanner();
+ while (scanner.hasNext())
+ {
+ SSTableIdentityIterator row = (SSTableIdentityIterator)
scanner.next();
+ if (sstable.isRepaired())
+ {
+ assertTrue(range.contains(row.getKey().getToken()));
+ assertEquals(repairedAt,
sstable.getSSTableMetadata().repairedAt);
+ repairedKeys++;
+ }
+ else
+ {
+ assertFalse(range.contains(row.getKey().getToken()));
+ assertEquals(ActiveRepairService.UNREPAIRED_SSTABLE,
sstable.getSSTableMetadata().repairedAt);
+ nonRepairedKeys++;
+ }
+ }
+ }
+ assertEquals(repairedKeys, 40);
+ assertEquals(nonRepairedKeys, 60);
}
-
- @After
- public void truncateCF()
++ @Test
++ public void shouldSkipAntiCompactionForNonIntersectingRange() throws
InterruptedException, ExecutionException, IOException
+ {
+ Keyspace keyspace = Keyspace.open(KEYSPACE1);
+ ColumnFamilyStore store = keyspace.getColumnFamilyStore(CF);
- store.truncateBlocking();
++ 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()));
++ List<Range<Token>> ranges = Arrays.asList(range);
++
++ SSTableReader.acquireReferences(sstables);
++ CompactionManager.instance.performAnticompaction(store, ranges,
sstables, 0);
++
++ assertThat(store.getSSTables().size(), is(10));
++ assertThat(Iterables.get(store.getSSTables(), 0).isRepaired(),
is(false));
+ }
++
}