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