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 ")) {