Repository: cassandra
Updated Branches:
  refs/heads/cassandra-3.1 7d3185059 -> b0f159c4a


Don't remove level info when running upgradesstables

Patch by marcuse; reviewed by yukim for CASSANDRA-10692


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

Branch: refs/heads/cassandra-3.1
Commit: 246cb883ab09bc69e842b8124c1537b38bb54335
Parents: 5a665b8
Author: Marcus Eriksson <marc...@apache.org>
Authored: Thu Nov 12 08:12:01 2015 +0100
Committer: Marcus Eriksson <marc...@apache.org>
Committed: Wed Nov 18 13:58:08 2015 +0100

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../compaction/WrappingCompactionStrategy.java  | 15 +++++++++
 .../LeveledCompactionStrategyTest.java          | 35 ++++++++++++++++++++
 3 files changed, 51 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/246cb883/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 008d4d4..6ccde28 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 2.1.12
+ * Don't remove level info when running upgradesstables (CASSANDRA-10692)
  * Create compression chunk for sending file only (CASSANDRA-10680)
  * Make buffered read size configurable (CASSANDRA-10249)
  * Forbid compact clustering column type changes in ALTER TABLE 
(CASSANDRA-8879)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/246cb883/src/java/org/apache/cassandra/db/compaction/WrappingCompactionStrategy.java
----------------------------------------------------------------------
diff --git 
a/src/java/org/apache/cassandra/db/compaction/WrappingCompactionStrategy.java 
b/src/java/org/apache/cassandra/db/compaction/WrappingCompactionStrategy.java
index ae67599..71a6bc1 100644
--- 
a/src/java/org/apache/cassandra/db/compaction/WrappingCompactionStrategy.java
+++ 
b/src/java/org/apache/cassandra/db/compaction/WrappingCompactionStrategy.java
@@ -123,6 +123,21 @@ public final class WrappingCompactionStrategy extends 
AbstractCompactionStrategy
     }
 
     @Override
+    public AbstractCompactionTask getCompactionTask(Collection<SSTableReader> 
sstables, final int gcBefore, long maxSSTableBytes)
+    {
+        assert sstables.size() > 0;
+        boolean repairedSSTables = sstables.iterator().next().isRepaired();
+        for (SSTableReader sstable : sstables)
+            if (repairedSSTables != sstable.isRepaired())
+                throw new RuntimeException("Can't mix repaired and unrepaired 
sstables in a compaction");
+
+        if (repairedSSTables)
+            return repaired.getCompactionTask(sstables, gcBefore, 
maxSSTableBytes);
+        else
+            return unrepaired.getCompactionTask(sstables, gcBefore, 
maxSSTableBytes);
+    }
+
+    @Override
     public synchronized AbstractCompactionTask 
getUserDefinedTask(Collection<SSTableReader> sstables, int gcBefore)
     {
         assert !sstables.isEmpty();

http://git-wip-us.apache.org/repos/asf/cassandra/blob/246cb883/test/unit/org/apache/cassandra/db/compaction/LeveledCompactionStrategyTest.java
----------------------------------------------------------------------
diff --git 
a/test/unit/org/apache/cassandra/db/compaction/LeveledCompactionStrategyTest.java
 
b/test/unit/org/apache/cassandra/db/compaction/LeveledCompactionStrategyTest.java
index da54eee..cb9cbb4 100644
--- 
a/test/unit/org/apache/cassandra/db/compaction/LeveledCompactionStrategyTest.java
+++ 
b/test/unit/org/apache/cassandra/db/compaction/LeveledCompactionStrategyTest.java
@@ -23,6 +23,7 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Random;
 import java.util.UUID;
+import java.util.concurrent.ExecutionException;
 
 import org.junit.After;
 import org.junit.Before;
@@ -278,4 +279,38 @@ public class LeveledCompactionStrategyTest extends 
SchemaLoader
         assertTrue(unrepaired.manifest.getLevel(1).contains(sstable2));
         assertFalse(repaired.manifest.getLevel(1).contains(sstable2));
     }
+
+    @Test
+    public void testDontRemoveLevelInfoUpgradeSSTables() throws 
InterruptedException, ExecutionException
+    {
+        byte [] b = new byte[100 * 1024];
+        new Random().nextBytes(b);
+        ByteBuffer value = ByteBuffer.wrap(b); // 100 KB value, make it easy 
to have multiple files
+
+        // Enough data to have a level 1 and 2
+        int rows = 20;
+        int columns = 10;
+
+        // Adds enough data to trigger multiple sstable per level
+        for (int r = 0; r < rows; r++)
+        {
+            DecoratedKey key = Util.dk(String.valueOf(r));
+            Mutation rm = new Mutation(ksname, key.getKey());
+            for (int c = 0; c < columns; c++)
+            {
+                rm.add(cfname, Util.cellname("column" + c), value, 0);
+            }
+            rm.apply();
+            cfs.forceBlockingFlush();
+        }
+        waitForLeveling(cfs);
+        cfs.forceBlockingFlush();
+        LeveledCompactionStrategy strategy = (LeveledCompactionStrategy) 
((WrappingCompactionStrategy) 
cfs.getCompactionStrategy()).getWrappedStrategies().get(1);
+        assertTrue(strategy.getAllLevelSize()[1] > 0);
+
+        cfs.disableAutoCompaction();
+        cfs.sstablesRewrite(false);
+        assertTrue(strategy.getAllLevelSize()[1] > 0);
+
+    }
 }

Reply via email to