From a6fa41e5f11dd7cb16fc7af37d6a65216d5bdabe Mon Sep 17 00:00:00 2001 From: Jonathan Ellis Date: Thu, 10 Feb 2011 02:44:50 +0000 Subject: [PATCH] add cli 'describe cluster' command patch by Pavel Yaskevich; reviewed by thobbs for CASSANDRA-2127 git-svn-id: https://svn.apache.org/repos/asf/cassandra/branches/cassandra-0.7@1069206 13f79535-47bb-0310-9956-ffa450edef68 --- src/java/org/apache/cassandra/cli/Cli.g | 9 ++++++ .../org/apache/cassandra/cli/CliClient.java | 30 +++++++++++++++++++ .../org/apache/cassandra/cli/CliUserHelp.java | 6 ++++ .../org/apache/cassandra/cli/CliTest.java | 2 ++ 4 files changed, 47 insertions(+) diff --git a/src/java/org/apache/cassandra/cli/Cli.g b/src/java/org/apache/cassandra/cli/Cli.g index 464c1f8a97..06f81eab1b 100644 --- a/src/java/org/apache/cassandra/cli/Cli.g +++ b/src/java/org/apache/cassandra/cli/Cli.g @@ -36,6 +36,7 @@ tokens { // NODE_CONNECT; NODE_DESCRIBE_TABLE; + NODE_DESCRIBE_CLUSTER; NODE_USE_TABLE; NODE_EXIT; NODE_HELP; @@ -138,6 +139,7 @@ statement | exitStatement | countStatement | describeTable + | describeCluster | addKeyspace | addColumnFamily | updateKeyspace @@ -172,6 +174,8 @@ helpStatement -> ^(NODE_HELP NODE_USE_TABLE) | HELP DESCRIBE KEYSPACE -> ^(NODE_HELP NODE_DESCRIBE_TABLE) + | HELP DESCRIBE 'CLUSTER' + -> ^(NODE_HELP NODE_DESCRIBE_CLUSTER) | HELP EXIT -> ^(NODE_HELP NODE_EXIT) | HELP QUIT @@ -325,6 +329,11 @@ describeTable -> ^(NODE_DESCRIBE_TABLE (keyspace)?) ; +describeCluster + : DESCRIBE 'CLUSTER' + -> ^(NODE_DESCRIBE_CLUSTER) + ; + useKeyspace : USE keyspace ( username )? ( password )? -> ^(NODE_USE_TABLE keyspace ( username )? ( password )?) diff --git a/src/java/org/apache/cassandra/cli/CliClient.java b/src/java/org/apache/cassandra/cli/CliClient.java index 8f1d690d9b..a109ef50e5 100644 --- a/src/java/org/apache/cassandra/cli/CliClient.java +++ b/src/java/org/apache/cassandra/cli/CliClient.java @@ -170,6 +170,9 @@ public class CliClient extends CliUserHelp case CliParser.NODE_DESCRIBE_TABLE: executeDescribeKeySpace(tree); break; + case CliParser.NODE_DESCRIBE_CLUSTER: + executeDescribeCluster(); + break; case CliParser.NODE_USE_TABLE: executeUseKeySpace(tree); break; @@ -1385,6 +1388,33 @@ public class CliClient extends CliUserHelp describeKeySpace(keySpaceName, null); } + // ^(NODE_DESCRIBE_CLUSTER) or describe: schema_versions, partitioner, snitch + private void executeDescribeCluster() + { + if (!CliMain.isConnected()) + return; + + sessionState.out.println("Cluster Information:"); + try + { + sessionState.out.println(" Snitch: " + thriftClient.describe_snitch()); + sessionState.out.println(" Partitioner: " + thriftClient.describe_partitioner()); + + sessionState.out.println(" Schema versions: "); + Map> versions = thriftClient.describe_schema_versions(); + + for (String version : versions.keySet()) + { + sessionState.out.println("\t" + version + ": " + versions.get(version)); + } + } + catch (Exception e) + { + String message = (e instanceof InvalidRequestException) ? ((InvalidRequestException) e).getWhy() : e.getMessage(); + sessionState.err.println("Error retrieving data: " + message); + } + } + // process a statement of the form: connect hostname/port private void executeConnect(Tree statement) { diff --git a/src/java/org/apache/cassandra/cli/CliUserHelp.java b/src/java/org/apache/cassandra/cli/CliUserHelp.java index d1db65893a..cea4e33284 100644 --- a/src/java/org/apache/cassandra/cli/CliUserHelp.java +++ b/src/java/org/apache/cassandra/cli/CliUserHelp.java @@ -106,6 +106,11 @@ public class CliUserHelp { state.out.println("describe keyspace system;"); break; + case CliParser.NODE_DESCRIBE_CLUSTER: + state.out.println("describe cluster;\n"); + state.out.println("Display information about cluster: snitch, partitioner, schema versions."); + break; + case CliParser.NODE_EXIT: state.out.println("exit;"); state.out.println("quit;\n"); @@ -337,6 +342,7 @@ public class CliUserHelp { state.out.println("describe keyspace ()?; Describe keyspace."); state.out.println("exit; Exit CLI."); state.out.println("quit; Exit CLI."); + state.out.println("describe cluster; Display information about cluster."); state.out.println("show cluster name; Display cluster name."); state.out.println("show keyspaces; Show list of keyspaces."); state.out.println("show api version; Show server API version."); diff --git a/test/unit/org/apache/cassandra/cli/CliTest.java b/test/unit/org/apache/cassandra/cli/CliTest.java index 580b127a12..2b3ea27469 100644 --- a/test/unit/org/apache/cassandra/cli/CliTest.java +++ b/test/unit/org/apache/cassandra/cli/CliTest.java @@ -115,6 +115,8 @@ public class CliTest extends CleanupHelper "set myCF['key']['scName']['firstname'] = 'John';", "get myCF['key']['scName']", "use TestKEYSpace;", + "describe cluster;", + "help describe cluster;", "show cluster name", "show api version", "help help",