From bf6ac62695b781793c5781fd3191d5a0a31dfa4d Mon Sep 17 00:00:00 2001 From: Eric Evans Date: Sat, 5 Dec 2009 05:27:38 +0000 Subject: [PATCH] improve lazy lookup of keyspace/column family metadata Patch by eevans git-svn-id: https://svn.apache.org/repos/asf/incubator/cassandra/trunk@887501 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/cassandra/cli/CliClient.java | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/java/org/apache/cassandra/cli/CliClient.java b/src/java/org/apache/cassandra/cli/CliClient.java index 967da55532..9adb9df067 100644 --- a/src/java/org/apache/cassandra/cli/CliClient.java +++ b/src/java/org/apache/cassandra/cli/CliClient.java @@ -32,7 +32,7 @@ public class CliClient { private Cassandra.Client thriftClient_ = null; private CliSessionState css_ = null; - Map> columnFamiliesMap; + private Map>> keyspacesMap = new HashMap>>(); public CliClient(CliSessionState css, Cassandra.Client thriftClient) { @@ -126,6 +126,15 @@ public class CliClient CliMain.disconnect(); System.exit(0); } + + Map> getCFMetaData(String keyspace) throws NotFoundException, TException + { + // Lazily lookup column family meta-data. + if (!(keyspacesMap.containsKey(keyspace))) + keyspacesMap.put(keyspace, thriftClient_.describe_keyspace(keyspace)); + return keyspacesMap.get(keyspace); + } + private void executeCount(CommonTree ast) throws TException, InvalidRequestException, UnavailableException, TimedOutException { if (!CliMain.isConnected()) @@ -238,13 +247,15 @@ public class CliClient String tableName = CliCompiler.getTableName(columnFamilySpec); String key = CliCompiler.getKey(columnFamilySpec); String columnFamily = CliCompiler.getColumnFamily(columnFamilySpec); - int columnSpecCnt = CliCompiler.numColumnSpecifiers(columnFamilySpec); + int columnSpecCnt = CliCompiler.numColumnSpecifiers(columnFamilySpec); - // Lazily lookup column family meta-data. - if (columnFamiliesMap == null) - columnFamiliesMap = thriftClient_.describe_keyspace(tableName); + if (!(getCFMetaData(tableName).containsKey(columnFamily))) + { + css_.out.println("No such column family: " + columnFamily); + return; + } - boolean isSuper = columnFamiliesMap.get(columnFamily).get("Type").equals("Super") ? true : false; + boolean isSuper = getCFMetaData(tableName).get(columnFamily).get("Type").equals("Super") ? true : false; byte[] superColumnName = null; byte[] columnName = null;