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); + } } }