Updated Branches:
refs/heads/cassandra-1.0 333e7ace0 -> 2216a3dce
make CLI `show schema` to use output stream directly instead of StringBuilder
patch by Pavel Yaskevich; reviewed by Brandon Williams for CASSANDRA-3842
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/2216a3dc
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/2216a3dc
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/2216a3dc
Branch: refs/heads/cassandra-1.0
Commit: 2216a3dce05e5b91c99b0aa98d2c1ce588f665df
Parents: 333e7ac
Author: Pavel Yaskevich <xedin@apache.org>
Authored: Tue Feb 7 23:01:19 2012 +0300
Committer: Pavel Yaskevich <xedin@apache.org>
Committed: Tue Feb 7 23:45:24 2012 +0300
----------------------------------------------------------------------
CHANGES.txt | 2 +
src/java/org/apache/cassandra/cli/CliClient.java | 171 +++++++++--------
2 files changed, 92 insertions(+), 81 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/2216a3dc/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 27831ba..a8b87f1 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -13,6 +13,8 @@
* add optional socket timeout for streaming (CASSANDRA-3838)
* fix truncate not to leave behind non-CFS backed secondary indexes
(CASSANDRA-3844)
+ * make CLI `show schema` to use output stream directly instead
+ of StringBuilder (CASSANDRA-3842)
Merged from 0.8:
* (Pig) fix CassandraStorage to use correct comparator in Super ColumnFamily
case (CASSANDRA-3251)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/2216a3dc/src/java/org/apache/cassandra/cli/CliClient.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cli/CliClient.java b/src/java/org/apache/cassandra/cli/CliClient.java
index 6b1e637..ab48b51 100644
--- a/src/java/org/apache/cassandra/cli/CliClient.java
+++ b/src/java/org/apache/cassandra/cli/CliClient.java
@@ -19,8 +19,7 @@ package org.apache.cassandra.cli;
import java.io.IOException;
import java.io.InputStream;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
+import java.io.PrintStream;
import java.nio.ByteBuffer;
import java.nio.charset.CharacterCodingException;
import java.util.*;
@@ -1574,24 +1573,23 @@ public class CliClient
else
ksIter = keyspaces.iterator();
-
- final StringBuilder sb = new StringBuilder();
while (ksIter.hasNext())
- showKeyspace(sb, ksIter.next());
+ showKeyspace(sessionState.out, ksIter.next());
- sessionState.out.printf(sb.toString());
+ sessionState.out.flush();
}
/**
* Creates a CLI script to create the Keyspace it's Column Families
- * @param sb StringBuilder to write to.
+ *
+ * @param output StringBuilder to write to.
* @param ksDef KsDef to create the cli script for.
*/
- private void showKeyspace(StringBuilder sb, KsDef ksDef)
+ private void showKeyspace(PrintStream output, KsDef ksDef)
{
- sb.append("create keyspace " + ksDef.name);
+ output.append("create keyspace ").append(ksDef.name);
- writeAttr(sb, true, "placement_strategy", normaliseType(ksDef.strategy_class, "org.apache.cassandra.locator"));
+ writeAttr(output, true, "placement_strategy", normaliseType(ksDef.strategy_class,
"org.apache.cassandra.locator"));
if (ksDef.strategy_options != null && !ksDef.strategy_options.isEmpty())
{
@@ -1604,57 +1602,58 @@ public class CliClient
prefix = ", ";
}
opts.append("}");
- writeAttrRaw(sb, false, "strategy_options", opts.toString());
+ writeAttrRaw(output, false, "strategy_options", opts.toString());
}
- writeAttr(sb, false, "durable_writes", ksDef.durable_writes);
+ writeAttr(output, false, "durable_writes", ksDef.durable_writes);
- sb.append(";" + NEWLINE);
- sb.append(NEWLINE);
+ output.append(";").append(NEWLINE);
+ output.append(NEWLINE);
- sb.append("use " + ksDef.name + ";");
- sb.append(NEWLINE);
- sb.append(NEWLINE);
+ output.append("use " + ksDef.name + ";");
+ output.append(NEWLINE);
+ output.append(NEWLINE);
Collections.sort(ksDef.cf_defs, new CfDefNamesComparator());
for (CfDef cfDef : ksDef.cf_defs)
- showColumnFamily(sb, cfDef);
- sb.append(NEWLINE);
- sb.append(NEWLINE);
+ showColumnFamily(output, cfDef);
+ output.append(NEWLINE);
+ output.append(NEWLINE);
}
/**
* Creates a CLI script for the CfDef including meta data to the supplied StringBuilder.
- * @param sb
- * @param cfDef
+ *
+ * @param output File to write to.
+ * @param cfDef CfDef to export attributes from.
*/
- private void showColumnFamily(StringBuilder sb, CfDef cfDef)
+ private void showColumnFamily(PrintStream output, CfDef cfDef)
{
- sb.append("create column family " + CliUtils.escapeSQLString(cfDef.name));
+ output.append("create column family ").append(CliUtils.escapeSQLString(cfDef.name));
- writeAttr(sb, true, "column_type", cfDef.column_type);
- writeAttr(sb, false, "comparator", normaliseType(cfDef.comparator_type, "org.apache.cassandra.db.marshal"));
+ writeAttr(output, true, "column_type", cfDef.column_type);
+ writeAttr(output, false, "comparator", normaliseType(cfDef.comparator_type, "org.apache.cassandra.db.marshal"));
if (cfDef.column_type.equals("Super"))
- writeAttr(sb, false, "subcomparator", normaliseType(cfDef.subcomparator_type,
"org.apache.cassandra.db.marshal"));
+ writeAttr(output, false, "subcomparator", normaliseType(cfDef.subcomparator_type,
"org.apache.cassandra.db.marshal"));
if (!StringUtils.isEmpty(cfDef.default_validation_class))
- writeAttr(sb, false, "default_validation_class",
+ writeAttr(output, false, "default_validation_class",
normaliseType(cfDef.default_validation_class, "org.apache.cassandra.db.marshal"));
- writeAttr(sb, false, "key_validation_class",
+ writeAttr(output, false, "key_validation_class",
normaliseType(cfDef.key_validation_class, "org.apache.cassandra.db.marshal"));
- writeAttr(sb, false, "rows_cached", cfDef.row_cache_size);
- writeAttr(sb, false, "row_cache_save_period", cfDef.row_cache_save_period_in_seconds);
- writeAttr(sb, false, "row_cache_keys_to_save", cfDef.row_cache_keys_to_save);
- writeAttr(sb, false, "keys_cached", cfDef.key_cache_size);
- writeAttr(sb, false, "key_cache_save_period", cfDef.key_cache_save_period_in_seconds);
- writeAttr(sb, false, "read_repair_chance", cfDef.read_repair_chance);
- writeAttr(sb, false, "gc_grace", cfDef.gc_grace_seconds);
- writeAttr(sb, false, "min_compaction_threshold", cfDef.min_compaction_threshold);
- writeAttr(sb, false, "max_compaction_threshold", cfDef.max_compaction_threshold);
- writeAttr(sb, false, "replicate_on_write", cfDef.replicate_on_write);
- writeAttr(sb, false, "row_cache_provider", normaliseType(cfDef.row_cache_provider,
"org.apache.cassandra.cache"));
- writeAttr(sb, false, "compaction_strategy", cfDef.compaction_strategy);
+ writeAttr(output, false, "rows_cached", cfDef.row_cache_size);
+ writeAttr(output, false, "row_cache_save_period", cfDef.row_cache_save_period_in_seconds);
+ writeAttr(output, false, "row_cache_keys_to_save", cfDef.row_cache_keys_to_save);
+ writeAttr(output, false, "keys_cached", cfDef.key_cache_size);
+ writeAttr(output, false, "key_cache_save_period", cfDef.key_cache_save_period_in_seconds);
+ writeAttr(output, false, "read_repair_chance", cfDef.read_repair_chance);
+ writeAttr(output, false, "gc_grace", cfDef.gc_grace_seconds);
+ writeAttr(output, false, "min_compaction_threshold", cfDef.min_compaction_threshold);
+ writeAttr(output, false, "max_compaction_threshold", cfDef.max_compaction_threshold);
+ writeAttr(output, false, "replicate_on_write", cfDef.replicate_on_write);
+ writeAttr(output, false, "row_cache_provider", normaliseType(cfDef.row_cache_provider,
"org.apache.cassandra.cache"));
+ writeAttr(output, false, "compaction_strategy", cfDef.compaction_strategy);
if (cfDef.isSetBloom_filter_fp_chance())
- writeAttr(sb, false, "bloom_filter_fp_chance", cfDef.bloom_filter_fp_chance);
+ writeAttr(output, false, "bloom_filter_fp_chance", cfDef.bloom_filter_fp_chance);
if (!cfDef.compaction_strategy_options.isEmpty())
{
@@ -1678,26 +1677,28 @@ public class CliClient
cOptions.append("}");
- writeAttrRaw(sb, false, "compaction_strategy_options", cOptions.toString());
+ writeAttrRaw(output, false, "compaction_strategy_options", cOptions.toString());
}
if (!StringUtils.isEmpty(cfDef.comment))
- writeAttr(sb, false, "comment", cfDef.comment);
+ writeAttr(output, false, "comment", cfDef.comment);
if (!cfDef.column_metadata.isEmpty())
{
- StringBuilder colSb = new StringBuilder();
- colSb.append("[");
+ output.append(NEWLINE)
+ .append(TAB)
+ .append("and column_metadata = [");
+
boolean first = true;
for (ColumnDef colDef : cfDef.column_metadata)
{
if (!first)
- colSb.append(",");
+ output.append(",");
first = false;
- showColumnMeta(colSb, cfDef, colDef);
+ showColumnMeta(output, cfDef, colDef);
}
- colSb.append("]");
- writeAttrRaw(sb, false, "column_metadata", colSb.toString());
+
+ output.append("]");
}
if (cfDef.compression_options != null && !cfDef.compression_options.isEmpty())
@@ -1720,51 +1721,59 @@ public class CliClient
compOptions.append("}");
- writeAttrRaw(sb, false, "compression_options", compOptions.toString());
+ writeAttrRaw(output, false, "compression_options", compOptions.toString());
}
- sb.append(";");
- sb.append(NEWLINE);
- sb.append(NEWLINE);
+ output.append(";");
+ output.append(NEWLINE);
+ output.append(NEWLINE);
}
/**
* Writes the supplied ColumnDef to the StringBuilder as a cli script.
- * @param sb
- * @param cfDef
- * @param colDef
+ *
+ * @param output The File to write to.
+ * @param cfDef The CfDef as a source for comparator/validator
+ * @param colDef The Column Definition to export
*/
- private void showColumnMeta(StringBuilder sb, CfDef cfDef, ColumnDef colDef)
+ private void showColumnMeta(PrintStream output, CfDef cfDef, ColumnDef colDef)
{
- sb.append(NEWLINE + TAB + TAB + "{");
+ output.append(NEWLINE + TAB + TAB + "{");
final AbstractType comparator = getFormatType(cfDef.column_type.equals("Super")
? cfDef.subcomparator_type
: cfDef.comparator_type);
- sb.append("column_name : '" + CliUtils.escapeSQLString(comparator.getString(colDef.name))
+ "'," + NEWLINE);
+ output.append("column_name : '" + CliUtils.escapeSQLString(comparator.getString(colDef.name))
+ "'," + NEWLINE);
String validationClass = normaliseType(colDef.validation_class, "org.apache.cassandra.db.marshal");
- sb.append(TAB + TAB + "validation_class : " + CliUtils.escapeSQLString(validationClass));
+ output.append(TAB + TAB + "validation_class : " + CliUtils.escapeSQLString(validationClass));
if (colDef.isSetIndex_name())
{
- sb.append("," + NEWLINE);
- sb.append(TAB + TAB + "index_name : '" + CliUtils.escapeSQLString(colDef.index_name)
+ "'," + NEWLINE);
- sb.append(TAB + TAB + "index_type : " + CliUtils.escapeSQLString(Integer.toString(colDef.index_type.getValue())));
+ output.append(",").append(NEWLINE)
+ .append(TAB + TAB + "index_name : '" + CliUtils.escapeSQLString(colDef.index_name)
+ "'," + NEWLINE)
+ .append(TAB + TAB + "index_type : " + CliUtils.escapeSQLString(Integer.toString(colDef.index_type.getValue())));
if (colDef.index_options != null)
{
- sb.append("," + NEWLINE);
- sb.append(TAB + TAB + "index_options : {" + NEWLINE);
+ output.append(",").append(NEWLINE);
+ output.append(TAB + TAB + "index_options : {" + NEWLINE);
int numOpts = colDef.index_options.size();
for (Map.Entry<String, String> entry : colDef.index_options.entrySet())
{
- sb.append(TAB + TAB + TAB + CliUtils.escapeSQLString(entry.getKey())
+ ": '" + CliUtils.escapeSQLString(entry.getValue()) + "'");
+ String option = CliUtils.escapeSQLString(entry.getKey());
+ String optionValue = CliUtils.escapeSQLString(entry.getValue());
+
+ output.append(TAB + TAB + TAB)
+ .append("'" + option + "' : '")
+ .append(optionValue)
+ .append("'");
+
if (--numOpts > 0)
- sb.append("," + NEWLINE);
+ output.append(",").append(NEWLINE);
}
- sb.append("}");
+ output.append("}");
}
}
- sb.append("}");
+ output.append("}");
}
private String normaliseType(String path, String expectedPackage)
@@ -1775,26 +1784,26 @@ public class CliClient
return path;
}
- private void writeAttr(StringBuilder sb, boolean first, String name, Boolean value)
+ private void writeAttr(PrintStream output, boolean first, String name, Boolean value)
{
- writeAttrRaw(sb, first, name, value.toString());
+ writeAttrRaw(output, first, name, value.toString());
}
- private void writeAttr(StringBuilder sb, boolean first, String name, Number value)
+ private void writeAttr(PrintStream output, boolean first, String name, Number value)
{
- writeAttrRaw(sb, first, name, value.toString());
+ writeAttrRaw(output, first, name, value.toString());
}
- private void writeAttr(StringBuilder sb, boolean first, String name, String value)
+ private void writeAttr(PrintStream output, boolean first, String name, String value)
{
- writeAttrRaw(sb, first, name, "'" + CliUtils.escapeSQLString(value) + "'");
+ writeAttrRaw(output, first, name, "'" + CliUtils.escapeSQLString(value) + "'");
}
- private void writeAttrRaw(StringBuilder sb, boolean first, String name, String value)
+ private void writeAttrRaw(PrintStream output, boolean first, String name, String value)
{
- sb.append(NEWLINE + TAB);
- sb.append(first ? "with " : "and ");
- sb.append(name + " = ");
- sb.append(value);
+ output.append(NEWLINE).append(TAB);
+ output.append(first ? "with " : "and ");
+ output.append(name).append(" = ");
+ output.append(value);
}
/**
* Returns true if this.keySpace is set, false otherwise
|