You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ee...@apache.org on 2010/02/24 01:42:18 UTC
svn commit: r915622 - in
/incubator/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/cli:
CliMain.java CliOptions.java CliSessionState.java
Author: eevans
Date: Wed Feb 24 00:42:17 2010
New Revision: 915622
URL: http://svn.apache.org/viewvc?rev=915622&view=rev
Log:
less confusing handling of errors/exceptions
* replaces some printed exceptions with human readable error messages,
while re-enabling the printed exceptions if --debug is passed.
* pull cluster name property on connect or startup, and output, (this
also forces any connection errors to occur sooner).
Patch by Mark Wolfe; reviewed by eevans for CASSANDRA-807
Modified:
incubator/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/cli/CliMain.java
incubator/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/cli/CliOptions.java
incubator/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/cli/CliSessionState.java
Modified: incubator/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/cli/CliMain.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/cli/CliMain.java?rev=915622&r1=915621&r2=915622&view=diff
==============================================================================
--- incubator/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/cli/CliMain.java (original)
+++ incubator/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/cli/CliMain.java Wed Feb 24 00:42:17 2010
@@ -18,21 +18,22 @@
package org.apache.cassandra.cli;
+import jline.ConsoleReader;
+import jline.History;
+import org.apache.cassandra.thrift.Cassandra;
import org.apache.thrift.protocol.TBinaryProtocol;
+import org.apache.thrift.transport.TFramedTransport;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
-import org.apache.thrift.transport.TFramedTransport;
-
-import jline.*;
-import java.io.*;
-import org.apache.cassandra.thrift.Cassandra;
+import java.io.File;
+import java.io.IOException;
import static org.apache.cassandra.db.Table.SYSTEM_TABLE;
-//
-// Cassandra Command Line Interface (CLI) Main
-//
+/**
+ * Cassandra Command Line Interface (CLI) Main
+ */
public class CliMain
{
public final static String PROMPT = "cassandra";
@@ -44,17 +45,26 @@
private static CliClient cliClient_;
private static CliCompleter completer_ = new CliCompleter();
- // Establish a thrift connection to cassandra instance
+ /**
+ * Establish a thrift connection to cassandra instance
+ *
+ * @param server - hostname or IP of the server
+ * @param port - Thrift port number
+ */
public static void connect(String server, int port)
{
+
TSocket socket = new TSocket(server, port);
if (transport_ != null)
transport_.close();
- if (css_.framed) {
+ if (css_.framed)
+ {
transport_ = new TFramedTransport(socket);
- } else {
+ }
+ else
+ {
transport_ = socket;
}
@@ -65,16 +75,38 @@
{
transport_.open();
}
- catch(Exception e)
+ catch (Exception e)
{
// Should move this to Log4J as well probably...
- System.err.println("Exception " + e.getMessage());
- e.printStackTrace();
+ css_.err.format("Exception connecting to %s/%d - %s\n", server, port, e.getMessage());
+
+ if (css_.debug)
+ e.printStackTrace();
+
+ return;
}
thriftClient_ = cassandraClient;
cliClient_ = new CliClient(css_, thriftClient_);
-
+
+ // Lookup the cluster name, this is to make it clear which cluster the user is connected to
+ String clusterName;
+
+ try
+ {
+ clusterName = thriftClient_.get_string_property("cluster name");
+ }
+ catch (Exception e)
+ {
+
+ css_.err.println("Exception retrieving information about the cassandra node, check you have connected to the thrift port.");
+
+ if (css_.debug)
+ e.printStackTrace();
+
+ return;
+ }
+
// Extend the completer with keyspace and column family data.
try
{
@@ -83,7 +115,7 @@
// Ignore system column family
if (keyspace.equals(SYSTEM_TABLE))
continue;
-
+
for (String cf : cliClient_.getCFMetaData(keyspace).keySet())
{
for (String cmd : completer_.getKeyspaceCommands())
@@ -94,12 +126,18 @@
catch (Exception e)
{
// Yes, we really do want to ignore any exceptions encountered here.
+ if (css_.debug)
+ e.printStackTrace();
+
+ return;
}
- css_.out.printf("Connected to %s/%d\n", server, port);
+ css_.out.printf("Connected to: \"%s\" on %s/%d%n", clusterName, server, port);
}
- // Disconnect thrift connection to cassandra instance
+ /**
+ * Disconnect thrift connection to cassandra instance
+ */
public static void disconnect()
{
if (transport_ != null)
@@ -115,6 +153,9 @@
css_.out.println("Type 'help' or '?' for help. Type 'quit' or 'exit' to quit.");
}
+ /**
+ * Checks whether the thrift client is connected.
+ */
public static boolean isConnected()
{
if (thriftClient_ == null)
@@ -131,16 +172,16 @@
{
cliClient_.executeCLIStmt(query);
}
- catch(Exception e)
+ catch (Exception e)
{
System.err.println("Exception " + e.getMessage());
- e.printStackTrace(System.err);
+ if (css_.debug)
+ e.printStackTrace();
+
}
- return;
}
-
- public static void main(String args[]) throws IOException
+ public static void main(String args[]) throws IOException
{
// process command line args
CliOptions cliOptions = new CliOptions();
@@ -151,7 +192,7 @@
{
connect(css_.hostName, css_.thriftPort);
}
- else
+ else
{
// If not, client must connect explicitly using the "connect" CLI statement.
cliClient_ = new CliClient(css_, null);
@@ -161,14 +202,14 @@
reader.addCompletor(completer_);
reader.setBellEnabled(false);
- String historyFile = System.getProperty("user.home") + File.separator + HISTORYFILE;
+ String historyFile = System.getProperty("user.home") + File.separator + HISTORYFILE;
reader.setHistory(new History(new File(historyFile)));
printBanner();
String line;
- while ((line = reader.readLine(PROMPT+"> ")) != null)
+ while ((line = reader.readLine(PROMPT + "> ")) != null)
{
processCLIStmt(line);
}
Modified: incubator/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/cli/CliOptions.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/cli/CliOptions.java?rev=915622&r1=915621&r2=915622&view=diff
==============================================================================
--- incubator/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/cli/CliOptions.java (original)
+++ incubator/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/cli/CliOptions.java Wed Feb 24 00:42:17 2010
@@ -19,6 +19,11 @@
import org.apache.commons.cli.*;
+/**
+ *
+ * Used to process, and act upon the arguments passed to the CLI.
+ *
+ */
public class CliOptions {
private static Options options = null; // Info about command line options
@@ -28,6 +33,7 @@
private static final String HOST_OPTION = "host";
private static final String PORT_OPTION = "port";
private static final String FRAME_OPTION = "framed";
+ private static final String DEBUG_OPTION = "debug";
// Default values for optional command line arguments
private static final int DEFAULT_THRIFT_PORT = 9160;
@@ -40,12 +46,13 @@
options.addOption(HOST_OPTION, true, "cassandra server's host name");
options.addOption(PORT_OPTION, true, "cassandra server's thrift port");
options.addOption(FRAME_OPTION, false, "cassandra server's framed transport");
+ options.addOption(DEBUG_OPTION, false, "display stack traces");
}
private static void printUsage()
{
System.err.println("");
- System.err.println("Usage: cassandra-cli --host hostname [--port <portname>] [--framed]");
+ System.err.println("Usage: cassandra-cli --host hostname [--port <portname>] [--framed] [--debug]");
System.err.println("");
}
@@ -81,10 +88,17 @@
}
// Look to see if frame has been specified
- if (cmd.hasOption(FRAME_OPTION)) {
+ if (cmd.hasOption(FRAME_OPTION))
+ {
css.framed = true;
}
+ // Look to see if frame has been specified
+ if (cmd.hasOption(DEBUG_OPTION))
+ {
+ css.debug = true;
+ }
+
// Look for optional args.
if (cmd.hasOption(PORT_OPTION))
{
Modified: incubator/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/cli/CliSessionState.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/cli/CliSessionState.java?rev=915622&r1=915621&r2=915622&view=diff
==============================================================================
--- incubator/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/cli/CliSessionState.java (original)
+++ incubator/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/cli/CliSessionState.java Wed Feb 24 00:42:17 2010
@@ -21,12 +21,16 @@
import java.io.InputStream;
import java.io.PrintStream;
-public class CliSessionState {
+/**
+ * Used to hold the state for the CLI.
+ */
+public class CliSessionState
+{
- public boolean timingOn = false;
public String hostName; // cassandra server name
public int thriftPort; // cassandra server's thrift port
public boolean framed = false; // cassandra server's framed transport
+ public boolean debug = false; // print stack traces when errors occur in the CLI
/*
* Streams to read/write from
@@ -35,7 +39,8 @@
public PrintStream out;
public PrintStream err;
- public CliSessionState() {
+ public CliSessionState()
+ {
in = System.in;
out = System.out;
err = System.err;