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/09/26 09:10:10 UTC

git commit: Support many sstables to be passed into sstablerepairedset

Repository: cassandra
Updated Branches:
  refs/heads/cassandra-2.1 c65ef9af6 -> 2a12e0574


Support many sstables to be passed into sstablerepairedset

Patch by carlyeks; reviewed by marcuse for CASSANDRA-7995


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

Branch: refs/heads/cassandra-2.1
Commit: 2a12e057464fff44d2d229fe2dc7bf5bcd6d7fc9
Parents: c65ef9a
Author: Carl Yeksigian <ca...@yeksigian.com>
Authored: Tue Sep 23 16:59:01 2014 -0400
Committer: Marcus Eriksson <ma...@apache.org>
Committed: Fri Sep 26 09:08:16 2014 +0200

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../tools/SSTableRepairedAtSetter.java          | 67 ++++++++++----------
 2 files changed, 34 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/2a12e057/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index ce0e76a..0080b25 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 2.1.1
+ * Make sstablerepairedset take a list of files (CASSANDRA-7995)
  * (cqlsh) Tab completeion for indexes on map keys (CASSANDRA-7972)
  * (cqlsh) Fix UDT field selection in select clause (CASSANDRA-7891)
  * Fix resource leak in event of corrupt sstable

http://git-wip-us.apache.org/repos/asf/cassandra/blob/2a12e057/src/java/org/apache/cassandra/tools/SSTableRepairedAtSetter.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/SSTableRepairedAtSetter.java b/src/java/org/apache/cassandra/tools/SSTableRepairedAtSetter.java
index 4dec32c..b37d3b4 100644
--- a/src/java/org/apache/cassandra/tools/SSTableRepairedAtSetter.java
+++ b/src/java/org/apache/cassandra/tools/SSTableRepairedAtSetter.java
@@ -17,25 +17,16 @@
  */
 package org.apache.cassandra.tools;
 
-import java.io.File;
-import java.io.IOException;
-import java.io.PrintStream;
+import java.io.*;
+import java.nio.charset.Charset;
 import java.nio.file.Files;
+import java.nio.file.Paths;
 import java.nio.file.attribute.FileTime;
-import java.util.EnumSet;
-import java.util.Map;
-import java.util.Set;
+import java.util.Arrays;
+import java.util.List;
 
-import org.apache.cassandra.config.DatabaseDescriptor;
-import org.apache.cassandra.db.ColumnFamilyStore;
-import org.apache.cassandra.db.Keyspace;
 import org.apache.cassandra.io.sstable.Component;
 import org.apache.cassandra.io.sstable.Descriptor;
-import org.apache.cassandra.io.sstable.metadata.CompactionMetadata;
-import org.apache.cassandra.io.sstable.metadata.MetadataComponent;
-import org.apache.cassandra.io.sstable.metadata.MetadataType;
-import org.apache.cassandra.io.sstable.metadata.StatsMetadata;
-import org.apache.cassandra.io.sstable.metadata.ValidationMetadata;
 import org.apache.cassandra.service.ActiveRepairService;
 
 /**
@@ -45,7 +36,7 @@ import org.apache.cassandra.service.ActiveRepairService;
  *
  * If you know you ran repair 2 weeks ago, you can do something like
  *
- * for x in $(find /var/lib/cassandra/data/.../ -iname "*Data.db*" -mtime +14); do sstablerepairset --is-repaired $x; done
+ * sstablerepairset --is-repaired -f <(find /var/lib/cassandra/data/.../ -iname "*Data.db*" -mtime +14)
  *
  */
 public class SSTableRepairedAtSetter
@@ -53,47 +44,55 @@ public class SSTableRepairedAtSetter
     /**
      * @param args a list of sstables whose metadata we are changing
      */
-    public static void main(String[] args) throws IOException
+    public static void main(final String[] args) throws IOException
     {
         PrintStream out = System.out;
         if (args.length == 0)
         {
             out.println("This command should be run with Cassandra stopped!");
-            out.println("Usage: sstablerepairedset [--is-repaired | --is-unrepaired] <sstable>");
+            out.println("Usage: sstablerepairedset [--is-repaired | --is-unrepaired] [-f <sstable-list> | <sstables>]");
             System.exit(1);
         }
 
-        for (String s : args)
-            System.out.println(s);
-
-        if (args.length != 3 || !args[0].equals("--really-set") || (!args[1].equals("--is-repaired") && !args[1].equals("--is-unrepaired")))
+        if (args.length < 3 || !args[0].equals("--really-set") || (!args[1].equals("--is-repaired") && !args[1].equals("--is-unrepaired")))
         {
             out.println("This command should be run with Cassandra stopped, otherwise you will get very strange behavior");
             out.println("Verify that Cassandra is not running and then execute the command like this:");
-            out.println("Usage: sstablelevelreset --really-set [--is-repaired | --is-unrepaired] <sstable>");
+            out.println("Usage: sstablelevelreset --really-set [--is-repaired | --is-unrepaired] [-f <sstable-list> | <sstables>]");
             System.exit(1);
         }
 
         boolean setIsRepaired = args[1].equals("--is-repaired");
 
-        String fname = args[2];
-        Descriptor descriptor = Descriptor.fromFilename(fname);
-        if (descriptor.version.hasRepairedAt)
+        List<String> fileNames;
+        if (args[2].equals("-f"))
+        {
+            fileNames = Files.readAllLines(Paths.get(args[3]), Charset.defaultCharset());
+        }
+        else
         {
-            if (setIsRepaired)
+            fileNames = Arrays.asList(args).subList(2, args.length);
+        }
+
+        for (String fname: fileNames)
+        {
+            Descriptor descriptor = Descriptor.fromFilename(fname);
+            if (descriptor.version.hasRepairedAt)
             {
-                FileTime f = Files.getLastModifiedTime(new File(descriptor.filenameFor(Component.DATA)).toPath());
-                descriptor.getMetadataSerializer().mutateRepairedAt(descriptor, f.toMillis());
+                if (setIsRepaired)
+                {
+                    FileTime f = Files.getLastModifiedTime(new File(descriptor.filenameFor(Component.DATA)).toPath());
+                    descriptor.getMetadataSerializer().mutateRepairedAt(descriptor, f.toMillis());
+                }
+                else
+                {
+                    descriptor.getMetadataSerializer().mutateRepairedAt(descriptor, ActiveRepairService.UNREPAIRED_SSTABLE);
+                }
             }
             else
             {
-                descriptor.getMetadataSerializer().mutateRepairedAt(descriptor, ActiveRepairService.UNREPAIRED_SSTABLE);
+                System.err.println("SSTable " + fname + " does not have repaired property, run upgradesstables");
             }
         }
-        else
-        {
-            out.println("SSTable "+fname+" does not have repaired property, run upgradesstables");
-        }
-
     }
 }