You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jj...@apache.org on 2017/12/08 00:19:35 UTC

cassandra git commit: Allow sstabledump to do a json object per partition

Repository: cassandra
Updated Branches:
  refs/heads/trunk 23691f5f8 -> 9110c08f4


Allow sstabledump to do a json object per partition

Patch by Kevin Wern; Reviewed by Jeff Jirsa for CASSANDRA-13848


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

Branch: refs/heads/trunk
Commit: 9110c08f47782ff8ed05067c0931af1bc020608b
Parents: 23691f5
Author: Kevin Wern <ke...@gmail.com>
Authored: Mon Oct 9 04:26:25 2017 -0400
Committer: Jeff Jirsa <jj...@apple.com>
Committed: Thu Dec 7 16:18:53 2017 -0800

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 NEWS.txt                                        |  2 ++
 .../apache/cassandra/tools/JsonTransformer.java | 35 ++++++++++++++++----
 .../apache/cassandra/tools/SSTableExport.java   |  8 +++++
 4 files changed, 39 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/9110c08f/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 8a1f0f8..cd8c678 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 4.0
+ * Allow sstabledump to do a json object per partition (CASSANDRA-13848)
  * Add option to optimise merkle tree comparison across replicas (CASSANDRA-3200)
  * Remove unused and deprecated methods from AbstractCompactionStrategy (CASSANDRA-14081)
  * Fix Distribution.average in cassandra-stress (CASSANDRA-14090)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/9110c08f/NEWS.txt
----------------------------------------------------------------------
diff --git a/NEWS.txt b/NEWS.txt
index 43f57f2..7bb9152 100644
--- a/NEWS.txt
+++ b/NEWS.txt
@@ -46,6 +46,8 @@ New features
      to use in production and limits utilization of heap memory and disk space with limits
      you can specify when enabling the log.
      See nodetool and fqltool help text for more information.
+   - SSTableDump now supports the -l option to output each partition as it's own json object
+     See CASSANDRA-13848 for more detail
 
 Upgrading
 ---------

http://git-wip-us.apache.org/repos/asf/cassandra/blob/9110c08f/src/java/org/apache/cassandra/tools/JsonTransformer.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/JsonTransformer.java b/src/java/org/apache/cassandra/tools/JsonTransformer.java
index e33a32c..502cb3b 100644
--- a/src/java/org/apache/cassandra/tools/JsonTransformer.java
+++ b/src/java/org/apache/cassandra/tools/JsonTransformer.java
@@ -56,6 +56,7 @@ import org.codehaus.jackson.JsonGenerator;
 import org.codehaus.jackson.impl.Indenter;
 import org.codehaus.jackson.util.DefaultPrettyPrinter.NopIndenter;
 import org.codehaus.jackson.util.DefaultPrettyPrinter;
+import org.codehaus.jackson.util.MinimalPrettyPrinter;
 
 public final class JsonTransformer
 {
@@ -78,17 +79,26 @@ public final class JsonTransformer
 
     private long currentPosition = 0;
 
-    private JsonTransformer(JsonGenerator json, ISSTableScanner currentScanner, boolean rawTime, TableMetadata metadata)
+    private JsonTransformer(JsonGenerator json, ISSTableScanner currentScanner, boolean rawTime, TableMetadata metadata, boolean isJsonLines)
     {
         this.json = json;
         this.metadata = metadata;
         this.currentScanner = currentScanner;
         this.rawTime = rawTime;
 
-        DefaultPrettyPrinter prettyPrinter = new DefaultPrettyPrinter();
-        prettyPrinter.indentObjectsWith(objectIndenter);
-        prettyPrinter.indentArraysWith(arrayIndenter);
-        json.setPrettyPrinter(prettyPrinter);
+        if (isJsonLines)
+        {
+            MinimalPrettyPrinter minimalPrettyPrinter = new MinimalPrettyPrinter();
+            minimalPrettyPrinter.setRootValueSeparator("\n");
+            json.setPrettyPrinter(minimalPrettyPrinter);
+        }
+        else
+        {
+            DefaultPrettyPrinter prettyPrinter = new DefaultPrettyPrinter();
+            prettyPrinter.indentObjectsWith(objectIndenter);
+            prettyPrinter.indentArraysWith(arrayIndenter);
+            json.setPrettyPrinter(prettyPrinter);
+        }
     }
 
     public static void toJson(ISSTableScanner currentScanner, Stream<UnfilteredRowIterator> partitions, boolean rawTime, TableMetadata metadata, OutputStream out)
@@ -96,18 +106,28 @@ public final class JsonTransformer
     {
         try (JsonGenerator json = jsonFactory.createJsonGenerator(new OutputStreamWriter(out, StandardCharsets.UTF_8)))
         {
-            JsonTransformer transformer = new JsonTransformer(json, currentScanner, rawTime, metadata);
+            JsonTransformer transformer = new JsonTransformer(json, currentScanner, rawTime, metadata, false);
             json.writeStartArray();
             partitions.forEach(transformer::serializePartition);
             json.writeEndArray();
         }
     }
 
+    public static void toJsonLines(ISSTableScanner currentScanner, Stream<UnfilteredRowIterator> partitions, boolean rawTime, TableMetadata metadata, OutputStream out)
+            throws IOException
+    {
+        try (JsonGenerator json = jsonFactory.createJsonGenerator(new OutputStreamWriter(out, StandardCharsets.UTF_8)))
+        {
+            JsonTransformer transformer = new JsonTransformer(json, currentScanner, rawTime, metadata, true);
+            partitions.forEach(transformer::serializePartition);
+        }
+    }
+
     public static void keysToJson(ISSTableScanner currentScanner, Stream<DecoratedKey> keys, boolean rawTime, TableMetadata metadata, OutputStream out) throws IOException
     {
         try (JsonGenerator json = jsonFactory.createJsonGenerator(new OutputStreamWriter(out, StandardCharsets.UTF_8)))
         {
-            JsonTransformer transformer = new JsonTransformer(json, currentScanner, rawTime, metadata);
+            JsonTransformer transformer = new JsonTransformer(json, currentScanner, rawTime, metadata, false);
             json.writeStartArray();
             keys.forEach(transformer::serializePartitionKey);
             json.writeEndArray();
@@ -221,6 +241,7 @@ public final class JsonTransformer
                 json.writeEndObject();
             }
         }
+
         catch (IOException e)
         {
             String key = metadata.partitionKeyType.getString(partition.partitionKey().getKey());

http://git-wip-us.apache.org/repos/asf/cassandra/blob/9110c08f/src/java/org/apache/cassandra/tools/SSTableExport.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/SSTableExport.java b/src/java/org/apache/cassandra/tools/SSTableExport.java
index 95e3ed6..4079ee7 100644
--- a/src/java/org/apache/cassandra/tools/SSTableExport.java
+++ b/src/java/org/apache/cassandra/tools/SSTableExport.java
@@ -62,6 +62,7 @@ public class SSTableExport
     private static final String EXCLUDE_KEY_OPTION = "x";
     private static final String ENUMERATE_KEYS_OPTION = "e";
     private static final String RAW_TIMESTAMPS = "t";
+    private static final String PARTITION_JSON_LINES = "l";
 
     private static final Options options = new Options();
     private static CommandLine cmd;
@@ -88,6 +89,9 @@ public class SSTableExport
 
         Option rawTimestamps = new Option(RAW_TIMESTAMPS, false, "Print raw timestamps instead of iso8601 date strings");
         options.addOption(rawTimestamps);
+
+        Option partitionJsonLines= new Option(PARTITION_JSON_LINES, false, "Output json lines, by partition");
+        options.addOption(partitionJsonLines);
     }
 
     /**
@@ -194,6 +198,10 @@ public class SSTableExport
                         });
                     });
                 }
+                else if (cmd.hasOption(PARTITION_JSON_LINES))
+                {
+                    JsonTransformer.toJsonLines(currentScanner, partitions, cmd.hasOption(RAW_TIMESTAMPS), metadata, System.out);
+                }
                 else
                 {
                     JsonTransformer.toJson(currentScanner, partitions, cmd.hasOption(RAW_TIMESTAMPS), metadata, System.out);


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