You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2013/12/21 07:36:43 UTC
[2/3] git commit: Allow removing snapshots of no-longer-existing CFs
patch by Lyuben Todorov and Mikhail Stepura for CASSANDRA-6418
Allow removing snapshots of no-longer-existing CFs
patch by Lyuben Todorov and Mikhail Stepura for CASSANDRA-6418
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/b5c9b498
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/b5c9b498
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/b5c9b498
Branch: refs/heads/trunk
Commit: b5c9b498fec1b71bc51afb3e45f828f4014baaff
Parents: 142e13f
Author: Jonathan Ellis <jb...@apache.org>
Authored: Sat Dec 21 00:36:30 2013 -0600
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Sat Dec 21 00:36:30 2013 -0600
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../apache/cassandra/db/ColumnFamilyStore.java | 9 +++++-
.../org/apache/cassandra/db/Directories.java | 34 ++++++++++++++++++--
src/java/org/apache/cassandra/db/Keyspace.java | 6 ++--
4 files changed, 43 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/b5c9b498/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 916ed7d..b80c821 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
2.0.4
+ * Allow removing snapshots of no-longer-existing CFs (CASSANDRA-6418)
* add StorageService.stopDaemon() (CASSANDRA-4268)
* add IRE for invalid CF supplied to get_count (CASSANDRA-5701)
* add client encryption support to sstableloader (CASSANDRA-6378)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/b5c9b498/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 d585407..a04c9e2 100644
--- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
+++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
@@ -1825,9 +1825,16 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
return directories.snapshotCreationTime(snapshotName);
}
+ /**
+ * Clear all the snapshots for a given column family.
+ *
+ * @param snapshotName the user supplied snapshot name. If left empty,
+ * all the snapshots will be cleaned.
+ */
public void clearSnapshot(String snapshotName)
{
- directories.clearSnapshot(snapshotName);
+ List<File> snapshotDirs = directories.getCFDirectories();
+ Directories.clearSnapshot(snapshotName, snapshotDirs);
}
public boolean hasUnreclaimedSpace()
http://git-wip-us.apache.org/repos/asf/cassandra/blob/b5c9b498/src/java/org/apache/cassandra/db/Directories.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/Directories.java b/src/java/org/apache/cassandra/db/Directories.java
index b006c71..2db4d9b 100644
--- a/src/java/org/apache/cassandra/db/Directories.java
+++ b/src/java/org/apache/cassandra/db/Directories.java
@@ -402,11 +402,11 @@ public class Directories
return false;
}
- public void clearSnapshot(String snapshotName)
+ public static void clearSnapshot(String snapshotName, List<File> snapshotDirectories)
{
// If snapshotName is empty or null, we will delete the entire snapshot directory
String tag = snapshotName == null ? "" : snapshotName;
- for (File dir : sstableDirectories)
+ for (File dir : snapshotDirectories)
{
File snapshotDir = new File(dir, join(SNAPSHOT_SUBDIR, tag));
if (snapshotDir.exists())
@@ -430,6 +430,36 @@ public class Directories
throw new RuntimeException("Snapshot " + snapshotName + " doesn't exist");
}
+ // Recursively finds all the sub directories in the KS directory.
+ public static List<File> getKSChildDirectories(String ksName)
+ {
+ List<File> result = new ArrayList<File>();
+ for (DataDirectory dataDirectory : dataFileLocations)
+ {
+ File ksDir = new File(dataDirectory.location, ksName);
+ File[] cfDirs = ksDir.listFiles();
+ if (cfDirs == null)
+ continue;
+ for (File cfDir : cfDirs)
+ {
+ if (cfDir.isDirectory())
+ result.add(cfDir);
+ }
+ }
+ return result;
+ }
+
+ public List<File> getCFDirectories()
+ {
+ List<File> result = new ArrayList<File>();
+ for (File dataDirectory : sstableDirectories)
+ {
+ if (dataDirectory.isDirectory())
+ result.add(dataDirectory);
+ }
+ return result;
+ }
+
private static File getOrCreate(File base, String... subdirs)
{
File dir = subdirs == null || subdirs.length == 0 ? base : new File(base, join(subdirs));
http://git-wip-us.apache.org/repos/asf/cassandra/blob/b5c9b498/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 0280ed2..36789e2 100644
--- a/src/java/org/apache/cassandra/db/Keyspace.java
+++ b/src/java/org/apache/cassandra/db/Keyspace.java
@@ -239,10 +239,8 @@ public class Keyspace
*/
public void clearSnapshot(String snapshotName)
{
- for (ColumnFamilyStore cfStore : columnFamilyStores.values())
- {
- cfStore.clearSnapshot(snapshotName);
- }
+ List<File> snapshotDirs = Directories.getKSChildDirectories(getName());
+ Directories.clearSnapshot(snapshotName, snapshotDirs);
}
/**