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 2014/04/01 07:41:20 UTC

git commit: Make sure we keep the sstable level when running upgradesstables.

Repository: cassandra
Updated Branches:
  refs/heads/cassandra-2.0 0fce7ace0 -> a90b98e90


Make sure we keep the sstable level when running upgradesstables.

Patch by marcuse; reviewed by yukim for CASSANDRA-6958


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

Branch: refs/heads/cassandra-2.0
Commit: a90b98e902fc54f62a379a6ce1e6ddead43ba1ec
Parents: 0fce7ac
Author: Marcus Eriksson <ma...@apache.org>
Authored: Tue Apr 1 07:37:12 2014 +0200
Committer: Marcus Eriksson <ma...@apache.org>
Committed: Tue Apr 1 07:40:35 2014 +0200

----------------------------------------------------------------------
 CHANGES.txt                                         |  1 +
 .../db/compaction/AbstractCompactionStrategy.java   |  2 ++
 .../cassandra/db/compaction/CompactionManager.java  |  2 +-
 .../db/compaction/LeveledCompactionStrategy.java    | 16 ++++++++++++++++
 .../db/compaction/SizeTieredCompactionStrategy.java |  6 ++++++
 .../apache/cassandra/db/compaction/Upgrader.java    |  2 ++
 6 files changed, 28 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/a90b98e9/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index b4f84e4..3326c6c 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -36,6 +36,7 @@
  * Add CqlRecordReader using native pagination (CASSANDRA-6311)
  * Add QueryHandler interface (CASSANDRA-6659)
  * Track liveRatio per-memtable, not per-CF (CASSANDRA-6945)
+ * Make sure upgradesstables keeps sstable level (CASSANDRA-6958)
 Merged from 1.2:
  * Add UNLOGGED, COUNTER options to BATCH documentation (CASSANDRA-6816)
  * add extra SSL cipher suites (CASSANDRA-6613)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/a90b98e9/src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java b/src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java
index 5425683..d3339d5 100644
--- a/src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java
+++ b/src/java/org/apache/cassandra/db/compaction/AbstractCompactionStrategy.java
@@ -167,6 +167,8 @@ public abstract class AbstractCompactionStrategy
      */
     public abstract AbstractCompactionTask getUserDefinedTask(Collection<SSTableReader> sstables, final int gcBefore);
 
+    public abstract AbstractCompactionTask getCompactionTask(Collection<SSTableReader> sstables, final int gcBefore, long maxSSTableBytes);
+
     /**
      * @return the number of background tasks estimated to still be needed for this columnfamilystore
      */

http://git-wip-us.apache.org/repos/asf/cassandra/blob/a90b98e9/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 453176e..31b7d8e 100644
--- a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
+++ b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java
@@ -251,7 +251,7 @@ public class CompactionManager implements CompactionManagerMBean
 
                     // SSTables are marked by the caller
                     // NOTE: it is important that the task create one and only one sstable, even for Leveled compaction (see LeveledManifest.replace())
-                    CompactionTask task = new CompactionTask(cfs, Collections.singletonList(sstable), NO_GC);
+                    AbstractCompactionTask task = cfs.getCompactionStrategy().getCompactionTask(Collections.singleton(sstable), NO_GC, Long.MAX_VALUE);
                     task.setUserDefined(true);
                     task.setCompactionType(OperationType.UPGRADE_SSTABLES);
                     task.execute(metrics);

http://git-wip-us.apache.org/repos/asf/cassandra/blob/a90b98e9/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java b/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java
index 18b9fbd..8637a2e 100644
--- a/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java
+++ b/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java
@@ -152,6 +152,22 @@ public class LeveledCompactionStrategy extends AbstractCompactionStrategy implem
         throw new UnsupportedOperationException("LevelDB compaction strategy does not allow user-specified compactions");
     }
 
+    @Override
+    public AbstractCompactionTask getCompactionTask(Collection<SSTableReader> sstables, int gcBefore, long maxSSTableBytes)
+    {
+        assert sstables.size() > 0;
+        int level = -1;
+        // if all sstables are in the same level, we can set that level:
+        for (SSTableReader sstable : sstables)
+        {
+            if (level == -1)
+                level = sstable.getSSTableLevel();
+            if (level != sstable.getSSTableLevel())
+                level = 0;
+        }
+        return new LeveledCompactionTask(cfs, sstables, level, gcBefore, maxSSTableBytes);
+    }
+
     public int getEstimatedRemainingTasks()
     {
         return manifest.getEstimatedTasks();

http://git-wip-us.apache.org/repos/asf/cassandra/blob/a90b98e9/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java b/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java
index 0f94918..fae52e2 100644
--- a/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java
+++ b/src/java/org/apache/cassandra/db/compaction/SizeTieredCompactionStrategy.java
@@ -271,6 +271,12 @@ public class SizeTieredCompactionStrategy extends AbstractCompactionStrategy
         return new CompactionTask(cfs, sstables, gcBefore).setUserDefined(true);
     }
 
+    @Override
+    public AbstractCompactionTask getCompactionTask(Collection<SSTableReader> sstables, int gcBefore, long maxSSTableBytes)
+    {
+        return new CompactionTask(cfs, sstables, gcBefore);
+    }
+
     public int getEstimatedRemainingTasks()
     {
         return estimatedRemainingTasks;

http://git-wip-us.apache.org/repos/asf/cassandra/blob/a90b98e9/src/java/org/apache/cassandra/db/compaction/Upgrader.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/Upgrader.java b/src/java/org/apache/cassandra/db/compaction/Upgrader.java
index 2805a52..98a55e9 100644
--- a/src/java/org/apache/cassandra/db/compaction/Upgrader.java
+++ b/src/java/org/apache/cassandra/db/compaction/Upgrader.java
@@ -66,6 +66,7 @@ public class Upgrader
 
         // Get the max timestamp of the precompacted sstables
         // and adds generation of live ancestors
+        // -- note that we always only have one SSTable in toUpgrade here:
         for (SSTableReader sstable : toUpgrade)
         {
             sstableMetadataCollector.addAncestor(sstable.descriptor.generation);
@@ -74,6 +75,7 @@ public class Upgrader
                 if (new File(sstable.descriptor.withGeneration(i).filenameFor(Component.DATA)).exists())
                     sstableMetadataCollector.addAncestor(i);
             }
+            sstableMetadataCollector.sstableLevel(sstable.getSSTableLevel());
         }
 
         return new SSTableWriter(cfs.getTempSSTablePath(directory), estimatedRows, cfs.metadata, cfs.partitioner, sstableMetadataCollector);