Author: jbellis
Date: Thu Oct 7 00:24:16 2010
New Revision: 1005302
URL: http://svn.apache.org/viewvc?rev=1005302&view=rev
Log:
improve cli error handling. patch by Pavel Yaskevich; reviewed by jbellis for
CASSANDRA-1580
Modified:
cassandra/trunk/CHANGES.txt
cassandra/trunk/src/java/org/apache/cassandra/cli/Cli.g
cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java
cassandra/trunk/src/java/org/apache/cassandra/cli/CliCompiler.java
cassandra/trunk/src/java/org/apache/cassandra/cli/CliMain.java
cassandra/trunk/src/java/org/apache/cassandra/cli/CliOptions.java
Modified: cassandra/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/cassandra/trunk/CHANGES.txt?rev=1005302&r1=1005301&r2=1005302&view=diff
==============================================================================
--- cassandra/trunk/CHANGES.txt (original)
+++ cassandra/trunk/CHANGES.txt Thu Oct 7 00:24:16 2010
@@ -16,6 +16,7 @@ dev
* meaningful error message for invalid replication strategy class
(CASSANDRA-1566)
* allow keyspace creation with RF > N (CASSANDRA-1428)
+ * improve cli error handling (CASSANDRA-1580)
0.7-beta2
Modified: cassandra/trunk/src/java/org/apache/cassandra/cli/Cli.g
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cli/Cli.g?rev=1005302&r1=1005301&r2=1005302&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cli/Cli.g (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cli/Cli.g Thu Oct 7 00:24:16
2010
@@ -69,6 +69,22 @@ package org.apache.cassandra.cli;
package org.apache.cassandra.cli;
}
+...@lexer::members
+{
+ public void reportError(RecognitionException e)
+ {
+ throw new RuntimeException("Syntax error at " + e.line + "-" +
e.charPositionInLine + ": " + this.getErrorMessage(e, this.getTokenNames()));
+ }
+}
+
+...@parser::members
+{
+ public void reportError(RecognitionException e)
+ {
+ throw new RuntimeException("Syntax error at " + e.line + "-" +
e.charPositionInLine + ": " + this.getErrorMessage(e, this.getTokenNames()));
+ }
+}
+
//
// Parser Section
//
Modified: cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java?rev=1005302&r1=1005301&r2=1005302&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java Thu Oct 7
00:24:16 2010
@@ -1118,7 +1118,18 @@ public class CliClient
}
else if (comparator instanceof IntegerType)
{
- return new BigInteger(column).toByteArray();
+ final BigInteger integerType;
+
+ try
+ {
+ integerType = new BigInteger(column);
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException("Column name '" + column + "' could
not be translated into an IntegerType.");
+ }
+
+ return integerType.toByteArray();
}
else if (comparator instanceof AsciiType)
{
Modified: cassandra/trunk/src/java/org/apache/cassandra/cli/CliCompiler.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cli/CliCompiler.java?rev=1005302&r1=1005301&r2=1005302&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cli/CliCompiler.java
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cli/CliCompiler.java Thu Oct
7 00:24:16 2010
@@ -77,9 +77,10 @@ public class CliCompiler
}
catch(Exception e)
{
- System.err.println("Exception " + e.getMessage());
- e.printStackTrace(System.err);
+ // if there was an exception we don't want to process request any
further
+ throw new RuntimeException(e.getMessage(), e);
}
+
return queryTree;
}
/*
Modified: cassandra/trunk/src/java/org/apache/cassandra/cli/CliMain.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cli/CliMain.java?rev=1005302&r1=1005301&r2=1005302&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cli/CliMain.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cli/CliMain.java Thu Oct 7
00:24:16 2010
@@ -241,7 +241,8 @@ public class CliMain
}
catch (Exception e)
{
- css_.err.println("Exception " + e.getMessage());
+ css_.err.println((e.getCause() == null) ? e.getMessage() :
e.getCause().getMessage());
+
if (css_.debug)
e.printStackTrace(css_.err);
@@ -286,7 +287,7 @@ public class CliMain
}
catch (IOException exp)
{
- css_.err.printf("Unable to open %s for writing%n",
historyFile);
+ css_.err.printf("Unable to open %s for writing %n",
historyFile);
}
}
else
Modified: cassandra/trunk/src/java/org/apache/cassandra/cli/CliOptions.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cli/CliOptions.java?rev=1005302&r1=1005301&r2=1005302&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cli/CliOptions.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cli/CliOptions.java Thu Oct
7 00:24:16 2010
@@ -38,7 +38,8 @@ public class CliOptions {
private static final String PASSWORD_OPTION = "password";
private static final String KEYSPACE_OPTION = "keyspace";
private static final String BATCH_OPTION = "batch";
-
+ private static final String HELP_OPTION = "help";
+
// Default values for optional command line arguments
private static final int DEFAULT_THRIFT_PORT = 9160;
@@ -55,14 +56,13 @@ public class CliOptions {
options.addOption(PASSWORD_OPTION, true, "password for cassandra
authentication");
options.addOption(KEYSPACE_OPTION, true, "cassandra keyspace user is
authenticated against");
options.addOption(BATCH_OPTION, false, "enabled batch mode (supress
output; errors are fatal)");
+ options.addOption(HELP_OPTION, false, "usage help.");
}
private static void printUsage()
{
- System.err.println("");
System.err.println("Usage: cassandra-cli --host hostname [--port
<portname>] [--unframed] [--debug]");
- System.err.println(" [--username username] [--password password]
[--keyspace keyspace] [--batch]");
- System.err.println("");
+ System.err.println("\t[--username username] [--password password]
[--keyspace keyspace] [--batch] [--help]");
}
public void processArgs(CliSessionState css, String[] args)
@@ -75,7 +75,7 @@ public class CliOptions {
catch (ParseException e)
{
printUsage();
- e.printStackTrace();
+ System.err.println("\n" + e.getMessage());
System.exit(1);
}
@@ -138,5 +138,11 @@ public class CliOptions {
{
css.batch = true;
}
+
+ if (cmd.hasOption(HELP_OPTION))
+ {
+ printUsage();
+ System.exit(1);
+ }
}
}