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 2017/12/15 12:49:28 UTC

cassandra git commit: Remove initialDirectories from CFS

Repository: cassandra
Updated Branches:
  refs/heads/trunk 92d4f7b48 -> 8b9b72deb


Remove initialDirectories from CFS

Patch by marcuse; reviewed by Paulo Motta for CASSANDRA-13928


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

Branch: refs/heads/trunk
Commit: 8b9b72deb4bf5f1c13c7f55bd11102c147160eab
Parents: 92d4f7b
Author: Marcus Eriksson <ma...@apache.org>
Authored: Mon Oct 9 13:51:34 2017 +0200
Committer: Marcus Eriksson <ma...@apache.org>
Committed: Fri Dec 15 13:48:20 2017 +0100

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../apache/cassandra/db/ColumnFamilyStore.java  | 59 ++------------------
 src/java/org/apache/cassandra/db/Keyspace.java  |  2 +-
 .../compaction/CompactionStrategyManager.java   | 15 -----
 .../cassandra/db/lifecycle/LogTransaction.java  |  2 +-
 .../cassandra/tools/StandaloneSSTableUtil.java  |  2 +-
 6 files changed, 8 insertions(+), 73 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/8b9b72de/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 9217382..6834bfd 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 4.0
+ * Remove initialDirectories from CFS (CASSANDRA-13928)
  * Fix trivial log format error (CASSANDRA-14015)
  * Allow sstabledump to do a json object per partition (CASSANDRA-13848)
  * Add option to optimise merkle tree comparison across replicas (CASSANDRA-3200)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/8b9b72de/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
index 1f7ba87..c12b474 100644
--- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
+++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
@@ -90,44 +90,6 @@ import static org.apache.cassandra.utils.Throwables.maybeFail;
 
 public class ColumnFamilyStore implements ColumnFamilyStoreMBean
 {
-    // The directories which will be searched for sstables on cfs instantiation.
-    private static volatile Directories.DataDirectory[] initialDirectories = Directories.dataDirectories;
-
-    /**
-     * A hook to add additional directories to initialDirectories.
-     * Any additional directories should be added prior to ColumnFamilyStore instantiation on startup
-     *
-     * Since the directories used by a given table are determined by the compaction strategy,
-     * it's possible for sstables to be written to directories specified outside of cassandra.yaml.
-     * By adding additional directories to initialDirectories, sstables in these extra locations are
-     * made discoverable on sstable instantiation.
-     */
-    public static synchronized void addInitialDirectories(Directories.DataDirectory[] newDirectories)
-    {
-        assert newDirectories != null;
-
-        Set<Directories.DataDirectory> existing = Sets.newHashSet(initialDirectories);
-
-        List<Directories.DataDirectory> replacementList = Lists.newArrayList(initialDirectories);
-        for (Directories.DataDirectory directory: newDirectories)
-        {
-            if (!existing.contains(directory))
-            {
-                replacementList.add(directory);
-            }
-        }
-
-        Directories.DataDirectory[] replacementArray = new Directories.DataDirectory[replacementList.size()];
-        replacementList.toArray(replacementArray);
-        initialDirectories = replacementArray;
-    }
-
-    public static Directories.DataDirectory[] getInitialDirectories()
-    {
-        Directories.DataDirectory[] src = initialDirectories;
-        return Arrays.copyOf(src, src.length);
-    }
-
     private static final Logger logger = LoggerFactory.getLogger(ColumnFamilyStore.class);
 
     /*
@@ -245,7 +207,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
 
     private final CompactionStrategyManager compactionStrategyManager;
 
-    private volatile Directories directories;
+    private final Directories directories;
 
     public final TableMetrics metric;
     public volatile long sampleLatencyNanos;
@@ -278,7 +240,6 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
                 cfs.crcCheckChance = new DefaultValue(metadata().params.crcCheckChance);
 
         compactionStrategyManager.maybeReload(metadata());
-        directories = compactionStrategyManager.getDirectories();
 
         scheduleFlush();
 
@@ -412,6 +373,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
 
         this.keyspace = keyspace;
         this.metadata = metadata;
+        this.directories = directories;
         name = columnFamilyName;
         minCompactionThreshold = new DefaultValue<>(metadata.get().params.compaction.minCompactionThreshold());
         maxCompactionThreshold = new DefaultValue<>(metadata.get().params.compaction.maxCompactionThreshold());
@@ -437,22 +399,9 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
             data.addInitialSSTables(sstables);
         }
 
-        /**
-         * When creating a CFS offline we change the default logic needed by CASSANDRA-8671
-         * and link the passed directories to be picked up by the compaction strategy
-         */
-        if (offline)
-            this.directories = directories;
-        else
-            this.directories = new Directories(metadata.get(), Directories.dataDirectories);
-
-
         // compaction strategy should be created after the CFS has been prepared
         compactionStrategyManager = new CompactionStrategyManager(this);
 
-        // Since compaction can re-define data dir we need to reinit directories
-        this.directories = compactionStrategyManager.getDirectories();
-
         if (maxCompactionThreshold.value() <= 0 || minCompactionThreshold.value() <=0)
         {
             logger.warn("Disabling compaction strategy by setting compaction thresholds to 0 is deprecated, set the compaction option 'enabled' to 'false' instead.");
@@ -612,7 +561,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
                                                                          TableMetadataRef metadata,
                                                                          boolean loadSSTables)
     {
-        Directories directories = new Directories(metadata.get(), initialDirectories);
+        Directories directories = new Directories(metadata.get());
         return createColumnFamilyStore(keyspace, columnFamily, metadata, directories, loadSSTables, true, false);
     }
 
@@ -648,7 +597,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
      */
     public static void  scrubDataDirectories(TableMetadata metadata) throws StartupException
     {
-        Directories directories = new Directories(metadata, initialDirectories);
+        Directories directories = new Directories(metadata);
         Set<File> cleanedDirectories = new HashSet<>();
 
          // clear ephemeral snapshots that were not properly cleared last session (CASSANDRA-7357)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/8b9b72de/src/java/org/apache/cassandra/db/Keyspace.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/Keyspace.java b/src/java/org/apache/cassandra/db/Keyspace.java
index c3e649a..df1ba39 100644
--- a/src/java/org/apache/cassandra/db/Keyspace.java
+++ b/src/java/org/apache/cassandra/db/Keyspace.java
@@ -304,7 +304,7 @@ public class Keyspace
      */
     public static void clearSnapshot(String snapshotName, String keyspace)
     {
-        List<File> snapshotDirs = Directories.getKSChildDirectories(keyspace, ColumnFamilyStore.getInitialDirectories());
+        List<File> snapshotDirs = Directories.getKSChildDirectories(keyspace);
         Directories.clearSnapshot(snapshotName, snapshotDirs);
     }
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/8b9b72de/src/java/org/apache/cassandra/db/compaction/CompactionStrategyManager.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionStrategyManager.java b/src/java/org/apache/cassandra/db/compaction/CompactionStrategyManager.java
index 8a01ba9..d520d8f 100644
--- a/src/java/org/apache/cassandra/db/compaction/CompactionStrategyManager.java
+++ b/src/java/org/apache/cassandra/db/compaction/CompactionStrategyManager.java
@@ -560,21 +560,6 @@ public class CompactionStrategyManager implements INotificationConsumer
         return shouldDefragment;
     }
 
-    public Directories getDirectories()
-    {
-        maybeReloadDiskBoundaries();
-        readLock.lock();
-        try
-        {
-            assert repaired.get(0).getClass().equals(unrepaired.get(0).getClass());
-            return repaired.get(0).getDirectories();
-        }
-        finally
-        {
-            readLock.unlock();
-        }
-    }
-
     private void handleFlushNotification(Iterable<SSTableReader> added)
     {
         // If reloaded, SSTables will be placed in their correct locations

http://git-wip-us.apache.org/repos/asf/cassandra/blob/8b9b72de/src/java/org/apache/cassandra/db/lifecycle/LogTransaction.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/lifecycle/LogTransaction.java b/src/java/org/apache/cassandra/db/lifecycle/LogTransaction.java
index d92cfc7..d38c324 100644
--- a/src/java/org/apache/cassandra/db/lifecycle/LogTransaction.java
+++ b/src/java/org/apache/cassandra/db/lifecycle/LogTransaction.java
@@ -428,7 +428,7 @@ class LogTransaction extends Transactional.AbstractTransactional implements Tran
      */
     static boolean removeUnfinishedLeftovers(TableMetadata metadata)
     {
-        return removeUnfinishedLeftovers(new Directories(metadata, ColumnFamilyStore.getInitialDirectories()).getCFDirectories());
+        return removeUnfinishedLeftovers(new Directories(metadata).getCFDirectories());
     }
 
     @VisibleForTesting

http://git-wip-us.apache.org/repos/asf/cassandra/blob/8b9b72de/src/java/org/apache/cassandra/tools/StandaloneSSTableUtil.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/StandaloneSSTableUtil.java b/src/java/org/apache/cassandra/tools/StandaloneSSTableUtil.java
index 3a6be63..9a7847a 100644
--- a/src/java/org/apache/cassandra/tools/StandaloneSSTableUtil.java
+++ b/src/java/org/apache/cassandra/tools/StandaloneSSTableUtil.java
@@ -84,7 +84,7 @@ public class StandaloneSSTableUtil
 
     private static void listFiles(Options options, TableMetadata metadata, OutputHandler handler) throws IOException
     {
-        Directories directories = new Directories(metadata, ColumnFamilyStore.getInitialDirectories());
+        Directories directories = new Directories(metadata);
 
         for (File dir : directories.getCFDirectories())
         {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org