Author: jbellis
Date: Sun Aug 14 02:48:34 2011
New Revision: 1157457

URL: http://svn.apache.org/viewvc?rev=1157457&view=rev
Log:
add non-interactive mode and lazy help loading to cli
patch by jbellis

Modified:
    cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java
    cassandra/trunk/src/java/org/apache/cassandra/cli/CliMain.java
    cassandra/trunk/test/unit/org/apache/cassandra/cli/CliTest.java

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=1157457&r1=1157456&r2=1157457&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java Sun Aug 14 
02:48:34 2011
@@ -40,6 +40,7 @@ import org.apache.cassandra.db.compactio
 import org.apache.cassandra.db.compaction.CompactionManagerMBean;
 import org.apache.cassandra.db.compaction.CompactionType;
 import org.apache.cassandra.db.marshal.*;
+import org.apache.cassandra.io.util.FileUtils;
 import org.apache.cassandra.locator.SimpleSnitch;
 import org.apache.cassandra.service.StorageProxy;
 import org.apache.cassandra.thrift.*;
@@ -158,12 +159,11 @@ public class CliClient
         this.sessionState = cliSessionState;
         this.thriftClient = thriftClient;
         this.cfKeysComparators = new HashMap<String, AbstractType>();
-        help = getHelp();
     }
 
-        private CliUserHelp getHelp()
+    private CliUserHelp getHelp()
     {
-        final InputStream is =  
CliClient.class.getClassLoader().getResourceAsStream("org/apache/cassandra/cli/CliHelp.yaml");
+        final InputStream is = 
CliClient.class.getClassLoader().getResourceAsStream("org/apache/cassandra/cli/CliHelp.yaml");
         assert is != null;
 
         try
@@ -172,18 +172,11 @@ public class CliClient
             TypeDescription desc = new TypeDescription(CliUserHelp.class);
             desc.putListPropertyType("commands", CliCommandHelp.class);
             final Yaml yaml = new Yaml(new Loader(constructor));
-            return (CliUserHelp)yaml.load(is);
+            return (CliUserHelp) yaml.load(is);
         }
         finally
         {
-            try
-            {
-                is.close();
-            }
-            catch (IOException e)
-            {
-                throw new IOError(e);
-            }
+            FileUtils.closeQuietly(is);
         }
     }
 
@@ -193,7 +186,7 @@ public class CliClient
     }
 
     // Execute a CLI Statement 
-    public void executeCLIStatement(String statement)
+    public void executeCLIStatement(String statement) throws 
CharacterCodingException, TException, TimedOutException, NotFoundException, 
NoSuchFieldException, InvalidRequestException, UnavailableException, 
InstantiationException, IllegalAccessException, ClassNotFoundException, 
SchemaDisagreementException
     {
         Tree tree = CliCompiler.compileQuery(statement);
 
@@ -296,24 +289,12 @@ public class CliClient
                     break;
             }
         }
-        catch (InvalidRequestException e)
-        {
-               RuntimeException rtEx = new RuntimeException(e.getWhy());
-            rtEx.initCause(e);
-            throw rtEx;
-        }
         catch (SchemaDisagreementException e)
         {
                RuntimeException rtEx = new RuntimeException("schema does not 
match across nodes, (try again later).");
             rtEx.initCause(e);
             throw new RuntimeException();
         }
-        catch (Exception e)
-        {
-            RuntimeException rtEx = new RuntimeException(e.getMessage());
-            rtEx.initCause(e);
-            throw rtEx;
-        }
     }
 
     private void cleanupAndExit()
@@ -334,6 +315,9 @@ public class CliClient
 
     private void executeHelp(Tree tree)
     {
+        if (help == null)
+            help = getHelp();
+
         if (tree.getChildCount() > 0)
         {
             String token = tree.getChild(0).getText();
@@ -1394,7 +1378,7 @@ public class CliClient
     }
 
     // DROP INDEX ON <CF>.<COLUMN>
-    private void executeDropIndex(Tree statement)
+    private void executeDropIndex(Tree statement) throws TException, 
SchemaDisagreementException, InvalidRequestException, NotFoundException
     {
         if (!CliMain.isConnected() || !hasKeySpace())
             return;
@@ -1428,25 +1412,14 @@ public class CliClient
                                                      rawColumName,
                                                      columnFamily));
 
-        try
-        {
-            String mySchemaVersion = 
thriftClient.system_update_column_family(cfDef);
-            sessionState.out.println(mySchemaVersion);
-            validateSchemaIsSettled(mySchemaVersion);
-            keyspacesMap.put(keySpace, 
thriftClient.describe_keyspace(keySpace));
-        }
-        catch (InvalidRequestException e)
-        {
-            System.err.println(e.why);
-        }
-        catch (Exception e)
-        {
-            throw new RuntimeException(e.getMessage(), e);
-        }
+        String mySchemaVersion = 
thriftClient.system_update_column_family(cfDef);
+        sessionState.out.println(mySchemaVersion);
+        validateSchemaIsSettled(mySchemaVersion);
+        keyspacesMap.put(keySpace, thriftClient.describe_keyspace(keySpace));
     }
 
     // TRUNCATE <columnFamily>
-    private void executeTruncate(String columnFamily)
+    private void executeTruncate(String columnFamily) throws TException, 
InvalidRequestException, UnavailableException
     {
         if (!CliMain.isConnected() || !hasKeySpace())
             return;
@@ -1454,19 +1427,8 @@ public class CliClient
         // getting CfDef, it will fail if there is no such column family in 
current keySpace. 
         CfDef cfDef = getCfDef(CliCompiler.getColumnFamily(columnFamily, 
keyspacesMap.get(keySpace).cf_defs));
 
-        try
-        {
-            thriftClient.truncate(cfDef.getName());
-            sessionState.out.println(columnFamily + " truncated.");
-        }
-        catch (InvalidRequestException e)
-        {
-            throw new RuntimeException(e.getWhy());
-        }
-        catch (Exception e)
-        {
-            throw new RuntimeException(e.getMessage());
-        }
+        thriftClient.truncate(cfDef.getName());
+        sessionState.out.println(columnFamily + " truncated.");
     }
 
     /**

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=1157457&r1=1157456&r2=1157457&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cli/CliMain.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cli/CliMain.java Sun Aug 14 
02:48:34 2011
@@ -22,6 +22,7 @@ import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileReader;
 import java.io.IOException;
+import java.nio.charset.CharacterCodingException;
 import java.util.*;
 
 import jline.ConsoleReader;
@@ -209,9 +210,13 @@ public class CliMain
         completer.setCandidateStrings(strs);
     }
 
-    public static void processStatement(String query)
+    public static void processStatement(String query) throws 
CharacterCodingException, ClassNotFoundException, TException, 
TimedOutException, SchemaDisagreementException, NotFoundException, 
InvalidRequestException, NoSuchFieldException, UnavailableException, 
IllegalAccessException, InstantiationException
     {
+        cliClient.executeCLIStatement(query);
+    }
 
+    public static void processStatementInteractive(String query)
+    {
         try
         {
             cliClient.executeCLIStatement(query);
@@ -342,7 +347,7 @@ public class CliMain
 
             if (line.endsWith(";") || line.equals("?"))
             {
-                processStatement(currentStatement);
+                processStatementInteractive(currentStatement);
                 currentStatement = "";
                 inCompoundStatement = false;
             }
@@ -385,7 +390,7 @@ public class CliMain
 
             if (line.endsWith(";"))
             {
-                processStatement(currentStatement);
+                processStatementInteractive(currentStatement);
                 currentStatement = "";
             }
             else

Modified: cassandra/trunk/test/unit/org/apache/cassandra/cli/CliTest.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/cli/CliTest.java?rev=1157457&r1=1157456&r2=1157457&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/cli/CliTest.java (original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/cli/CliTest.java Sun Aug 14 
02:48:34 2011
@@ -21,6 +21,8 @@ package org.apache.cassandra.cli;
 import org.apache.cassandra.CleanupHelper;
 import org.apache.cassandra.config.ConfigurationException;
 import org.apache.cassandra.service.EmbeddedCassandraService;
+import org.apache.cassandra.thrift.*;
+import org.apache.thrift.TException;
 import org.apache.thrift.transport.TTransportException;
 import org.junit.Test;
 
@@ -190,7 +192,7 @@ public class CliTest extends CleanupHelp
     };
    
     @Test
-    public void testCli() throws IOException, TTransportException, 
ConfigurationException
+    public void testCli() throws IOException, TException, 
ConfigurationException, ClassNotFoundException, TimedOutException, 
NotFoundException, SchemaDisagreementException, NoSuchFieldException, 
InvalidRequestException, UnavailableException, InstantiationException, 
IllegalAccessException
     {
         new EmbeddedCassandraService().start();
 
@@ -206,8 +208,15 @@ public class CliTest extends CleanupHelp
         CliMain.sessionState.setErr(new PrintStream(errStream));
 
         // re-creating keyspace for tests
-        // dropping in case it exists e.g. could be left from previous run
-        CliMain.processStatement("drop keyspace TestKeySpace;");
+        try
+        {
+            // dropping in case it exists e.g. could be left from previous run
+            CliMain.processStatement("drop keyspace TestKeySpace;");
+        }
+        catch (Exception e)
+        {
+            // TODO check before drop so we don't have this fragile ignored 
exception block
+        }
         CliMain.processStatement("create keyspace TestKeySpace;");
 
         for (String statement : statements)
@@ -220,7 +229,8 @@ public class CliTest extends CleanupHelp
             assertEquals(errStream.toString() + " processing " + statement, 
"", errStream.toString());
             if (statement.startsWith("drop ") || statement.startsWith("create 
") || statement.startsWith("update "))
             {
-                assert 
Pattern.compile("(.{8})-(.{4})-(.{4})-(.{4})-(.{12}).*", 
Pattern.DOTALL).matcher(result).matches() : result;
+                assert 
Pattern.compile("(.{8})-(.{4})-(.{4})-(.{4})-(.{12}).*", 
Pattern.DOTALL).matcher(result).matches()
+                       : String.format("\"%s\" failed: %s", statement, result);
             }
             else if (statement.startsWith("set "))
             {


Reply via email to