Author: jbellis
Date: Tue Dec 28 03:24:41 2010
New Revision: 1053247
URL: http://svn.apache.org/viewvc?rev=1053247&view=rev
Log:
Expose index-building status in JMX + cli schema description
patch by Pavel Yaskevich; reviewed by jbellis for CASSANDRA-1871
Modified:
cassandra/branches/cassandra-0.7/CHANGES.txt
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliClient.java
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliOptions.java
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliSessionState.java
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/Table.java
Modified: cassandra/branches/cassandra-0.7/CHANGES.txt
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/CHANGES.txt?rev=1053247&r1=1053246&r2=1053247&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.7/CHANGES.txt Tue Dec 28 03:24:41 2010
@@ -12,6 +12,8 @@ dev
* handle URL-specified log4j regression (CASSANDRA-1907)
* enable keepalive on intra-cluster sockets (CASSANDRA-1766)
* count timeouts towards dynamicsnitch latencies (CASSANDRA-1905)
+ * Expose index-building status in JMX + cli schema description
+ (CASSANDRA-1871)
0.7.0-rc3
Modified:
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliClient.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliClient.java?rev=1053247&r1=1053246&r2=1053247&view=diff
==============================================================================
---
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliClient.java
(original)
+++
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliClient.java
Tue Dec 28 03:24:41 2010
@@ -17,6 +17,7 @@
*/
package org.apache.cassandra.cli;
+import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.*;
@@ -25,8 +26,11 @@ import com.google.common.base.Charsets;
import org.antlr.runtime.tree.Tree;
import org.apache.cassandra.auth.SimpleAuthenticator;
import org.apache.cassandra.config.ConfigurationException;
+import org.apache.cassandra.db.ColumnFamilyStoreMBean;
+import org.apache.cassandra.db.CompactionManagerMBean;
import org.apache.cassandra.db.marshal.*;
import org.apache.cassandra.thrift.*;
+import org.apache.cassandra.tools.NodeProbe;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.FBUtilities;
import org.apache.cassandra.utils.UUIDGen;
@@ -1206,6 +1210,11 @@ public class CliClient extends CliUserHe
private void describeKeySpace(String keySpaceName, KsDef metadata) throws
TException
{
+ NodeProbe probe = sessionState.getNodeProbe();
+
+ // getting compaction manager MBean to displaying index building
information
+ CompactionManagerMBean compactionManagerMBean = (probe == null) ? null
: probe.getCompactionManagerProxy();
+
// Describe and display
sessionState.out.println("Keyspace: " + keySpaceName + ":");
try
@@ -1213,10 +1222,12 @@ public class CliClient extends CliUserHe
KsDef ks_def;
ks_def = metadata == null ?
thriftClient.describe_keyspace(keySpaceName) : metadata;
sessionState.out.println(" Replication Strategy: " +
ks_def.strategy_class);
+
if (ks_def.strategy_class.endsWith(".NetworkTopologyStrategy"))
sessionState.out.println(" Options: " +
FBUtilities.toString(ks_def.strategy_options));
else
sessionState.out.println(" Replication Factor: " +
ks_def.replication_factor);
+
sessionState.out.println(" Column Families:");
boolean isSuper;
@@ -1224,6 +1235,9 @@ public class CliClient extends CliUserHe
Collections.sort(ks_def.cf_defs, new CfDefNamesComparator());
for (CfDef cf_def : ks_def.cf_defs)
{
+ // fetching bean for current column family store
+ ColumnFamilyStoreMBean cfMBean = (probe == null) ? null :
probe.getCfsProxy(ks_def.getName(), cf_def.getName());
+
isSuper = cf_def.column_type.equals("Super");
sessionState.out.printf(" ColumnFamily: %s%s%n",
cf_def.name, isSuper ? " (Super)" : "");
@@ -1241,6 +1255,12 @@ public class CliClient extends CliUserHe
sessionState.out.printf(" Compaction min/max thresholds:
%s/%s%n", cf_def.min_compaction_threshold, cf_def.max_compaction_threshold);
sessionState.out.printf(" Read repair chance: %s%n",
cf_def.read_repair_chance);
+ // if we have connection to the cfMBean established
+ if (cfMBean != null)
+ {
+ sessionState.out.printf(" Built indexes: %s%n",
cfMBean.getBuiltIndexes());
+ }
+
if (cf_def.getColumn_metadataSize() != 0)
{
String leftSpace = " ";
@@ -1281,6 +1301,26 @@ public class CliClient extends CliUserHe
}
}
}
+
+ // compaction manager information
+ if (compactionManagerMBean != null)
+ {
+ String compactionType =
compactionManagerMBean.getCompactionType();
+
+ // if ongoing compaction type is index build
+ if (compactionType != null && compactionType.contains("index
build"))
+ {
+ String indexName =
compactionManagerMBean.getColumnFamilyInProgress();
+ long bytesCompacted =
compactionManagerMBean.getBytesCompacted();
+ long totalBytesToProcess =
compactionManagerMBean.getBytesTotalInProgress();
+
+ sessionState.out.printf("%nCurrently building index %s,
completed %d of %d bytes.%n", indexName, bytesCompacted, totalBytesToProcess);
+ }
+ }
+
+ // closing JMX connection
+ if (probe != null)
+ probe.close();
}
catch (InvalidRequestException e)
{
@@ -1290,7 +1330,12 @@ public class CliClient extends CliUserHe
{
sessionState.out.println("Keyspace " + keySpaceName + " could not
be found.");
}
+ catch (IOException e)
+ {
+ sessionState.out.println("Error while closing JMX connection: " +
e.getMessage());
+ }
}
+
// DESCRIBE KEYSPACE <keyspace_name>
private void executeDescribeKeySpace(Tree statement) throws TException,
InvalidRequestException
{
Modified:
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliOptions.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliOptions.java?rev=1053247&r1=1053246&r2=1053247&view=diff
==============================================================================
---
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliOptions.java
(original)
+++
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliOptions.java
Tue Dec 28 03:24:41 2010
@@ -39,7 +39,8 @@ public class CliOptions {
private static final String BATCH_OPTION = "batch";
private static final String HELP_OPTION = "help";
private static final String FILE_OPTION = "file";
-
+ private static final String JMX_PORT_OPTION = "jmxport";
+
// Default values for optional command line arguments
private static final int DEFAULT_THRIFT_PORT = 9160;
@@ -57,12 +58,13 @@ public class CliOptions {
options.addOption(KEYSPACE_OPTION, true, "cassandra keyspace user is
authenticated against");
options.addOption(BATCH_OPTION, false, "enabled batch mode (supress
output; errors are fatal)");
options.addOption(FILE_OPTION, true, "load statements from the
specific file.");
+ options.addOption(JMX_PORT_OPTION, true, "JMX service port.");
options.addOption(HELP_OPTION, false, "usage help.");
}
private static void printUsage()
{
- System.err.println("Usage: cassandra-cli --host hostname [--port
<portname>] [--file <filename>] [--unframed] [--debug]");
+ System.err.println("Usage: cassandra-cli --host hostname [--port
<port>] [--jmxport <port>] [--file <filename>] [--unframed] [--debug]");
System.err.println("\t[--username username] [--password password]
[--keyspace keyspace] [--batch] [--help]");
}
@@ -138,6 +140,11 @@ public class CliOptions {
css.filename = cmd.getOptionValue(FILE_OPTION);
}
+ if (cmd.hasOption(JMX_PORT_OPTION))
+ {
+ css.jmxPort =
Integer.parseInt(cmd.getOptionValue(JMX_PORT_OPTION));
+ }
+
if (cmd.hasOption(HELP_OPTION))
{
printUsage();
Modified:
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliSessionState.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliSessionState.java?rev=1053247&r1=1053246&r2=1053247&view=diff
==============================================================================
---
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliSessionState.java
(original)
+++
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliSessionState.java
Tue Dec 28 03:24:41 2010
@@ -18,6 +18,8 @@
package org.apache.cassandra.cli;
+import org.apache.cassandra.tools.NodeProbe;
+
import java.io.InputStream;
import java.io.PrintStream;
@@ -36,6 +38,7 @@ public class CliSessionState
public String keyspace; // cassandra keyspace user is authenticating
public boolean batch = false; // enable/disable batch processing mode
public String filename = ""; // file to read commands from
+ public int jmxPort = 8080;// JMX service port
/*
* Streams to read/write from
@@ -65,4 +68,19 @@ public class CliSessionState
{
return !this.filename.isEmpty();
}
+
+ public NodeProbe getNodeProbe()
+ {
+ try
+ {
+ return new NodeProbe(hostName, jmxPort);
+ }
+ catch (Exception e)
+ {
+ err.printf("WARNING: Could not connect to the JMX on %s:%d,
information won't be shown.%n%n", hostName, jmxPort);
+ }
+
+ return null;
+ }
+
}
Modified:
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=1053247&r1=1053246&r2=1053247&view=diff
==============================================================================
---
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
(original)
+++
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
Tue Dec 28 03:24:41 2010
@@ -318,7 +318,7 @@ public class ColumnFamilyStore implement
return;
// if we're just linking in the index to indexedColumns on an
already-built index post-restart, we're done
- if (SystemTable.isIndexBuilt(table.name, indexedCfMetadata.cfName))
+ if (indexedCfs.isIndexBuilt())
return;
// build it asynchronously; addIndex gets called by CFS open and
schema update, neither of which
@@ -1929,4 +1929,33 @@ public class ColumnFamilyStore implement
return histogram;
}
+
+ /**
+ * Check if index is already built for current store
+ * @return true if built, false otherwise
+ */
+ public boolean isIndexBuilt()
+ {
+ return SystemTable.isIndexBuilt(table.name, columnFamily);
+ }
+
+ /**
+ * Returns a list of the names of the built column indexes for current
store
+ * @return list of the index names
+ */
+ public List<String> getBuiltIndexes()
+ {
+ List<String> indexes = new ArrayList<String>();
+
+ for (ColumnFamilyStore cfs : indexedColumns.values())
+ {
+ if (cfs.isIndexBuilt())
+ {
+ indexes.add(cfs.columnFamily); // store.columnFamily
represents a name of the index
+ }
+ }
+
+ return indexes;
+ }
+
}
Modified:
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java?rev=1053247&r1=1053246&r2=1053247&view=diff
==============================================================================
---
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java
(original)
+++
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java
Tue Dec 28 03:24:41 2010
@@ -19,6 +19,7 @@
package org.apache.cassandra.db;
import java.io.IOException;
+import java.util.List;
import java.util.concurrent.ExecutionException;
/**
@@ -213,4 +214,10 @@ public interface ColumnFamilyStoreMBean
public long[] getEstimatedRowSizeHistogram();
public long[] getEstimatedColumnCountHistogram();
+
+ /**
+ * Returns a list of the names of the built column indexes for current
store
+ * @return list of the index names
+ */
+ public List<String> getBuiltIndexes();
}
Modified:
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/Table.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/Table.java?rev=1053247&r1=1053246&r2=1053247&view=diff
==============================================================================
---
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/Table.java
(original)
+++
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/Table.java
Tue Dec 28 03:24:41 2010
@@ -643,7 +643,7 @@ public class Table
public String getTaskType()
{
- return "Secondary index build";
+ return String.format("Secondary index build %s", cfs.columnFamily);
}
}