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


Reply via email to