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));
+     }
++
  }

Reply via email to