You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ty...@apache.org on 2015/03/20 17:38:13 UTC
cassandra git commit: Fix NPE in nodetool getendpoints with bad ks/cf
Repository: cassandra
Updated Branches:
refs/heads/cassandra-2.0 5fd4a0116 -> 37eb2a0e2
Fix NPE in nodetool getendpoints with bad ks/cf
Patch by Stefania Alborghetti; reviewed by Tyler Hobbs for
CASSANDRA-8950
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/37eb2a0e
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/37eb2a0e
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/37eb2a0e
Branch: refs/heads/cassandra-2.0
Commit: 37eb2a0e29c22a1b2f033e8191b5808a6f7b0d3f
Parents: 5fd4a01
Author: Stefania Alborghetti <st...@datastax.com>
Authored: Fri Mar 20 11:37:23 2015 -0500
Committer: Tyler Hobbs <ty...@apache.org>
Committed: Fri Mar 20 11:37:23 2015 -0500
----------------------------------------------------------------------
CHANGES.txt | 2 ++
.../org/apache/cassandra/service/StorageService.java | 9 ++++++++-
src/java/org/apache/cassandra/tools/NodeCmd.java | 13 +++++++++----
src/java/org/apache/cassandra/tools/NodeProbe.java | 5 +++++
4 files changed, 24 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/37eb2a0e/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index f10a89a..25fbd74 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,6 @@
2.0.14:
+ * Fix NullPointerException when nodetool getendpoints is run
+ against invalid keyspaces or tables (CASSANDRA-8950)
* Allow specifying the tmp dir (CASSANDRA-7712)
* Improve compaction estimated tasks estimation (CASSANDRA-8904)
* Fix duplicate up/down messages sent to native clients (CASSANDRA-7816)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/37eb2a0e/src/java/org/apache/cassandra/service/StorageService.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StorageService.java b/src/java/org/apache/cassandra/service/StorageService.java
index 8085d7b..622380e 100644
--- a/src/java/org/apache/cassandra/service/StorageService.java
+++ b/src/java/org/apache/cassandra/service/StorageService.java
@@ -2778,7 +2778,14 @@ public class StorageService extends NotificationBroadcasterSupport implements IE
*/
public List<InetAddress> getNaturalEndpoints(String keyspaceName, String cf, String key)
{
- CFMetaData cfMetaData = Schema.instance.getKSMetaData(keyspaceName).cfMetaData().get(cf);
+ KSMetaData ksMetaData = Schema.instance.getKSMetaData(keyspaceName);
+ if (ksMetaData == null)
+ throw new IllegalArgumentException("Unknown keyspace '" + keyspaceName + "'");
+
+ CFMetaData cfMetaData = ksMetaData.cfMetaData().get(cf);
+ if (cfMetaData == null)
+ throw new IllegalArgumentException("Unknown table '" + cf + "' in keyspace '" + keyspaceName + "'");
+
return getNaturalEndpoints(keyspaceName, getPartitioner().getToken(cfMetaData.getKeyValidator().fromString(key)));
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/37eb2a0e/src/java/org/apache/cassandra/tools/NodeCmd.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/NodeCmd.java b/src/java/org/apache/cassandra/tools/NodeCmd.java
index df53347..bc5410f 100644
--- a/src/java/org/apache/cassandra/tools/NodeCmd.java
+++ b/src/java/org/apache/cassandra/tools/NodeCmd.java
@@ -1182,11 +1182,16 @@ public class NodeCmd
private void printEndPoints(String keySpace, String cf, String key, PrintStream output)
{
- List<InetAddress> endpoints = this.probe.getEndpoints(keySpace, cf, key);
-
- for (InetAddress anEndpoint : endpoints)
+ try
+ {
+ List<InetAddress> endpoints = probe.getEndpoints(keySpace, cf, key);
+ for (InetAddress anEndpoint : endpoints)
+ output.println(anEndpoint.getHostAddress());
+ }
+ catch (IllegalArgumentException ex)
{
- output.println(anEndpoint.getHostAddress());
+ output.println(ex.getMessage());
+ probe.failed();
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/37eb2a0e/src/java/org/apache/cassandra/tools/NodeProbe.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/NodeProbe.java b/src/java/org/apache/cassandra/tools/NodeProbe.java
index 6b28f18..d66d12d 100644
--- a/src/java/org/apache/cassandra/tools/NodeProbe.java
+++ b/src/java/org/apache/cassandra/tools/NodeProbe.java
@@ -907,6 +907,11 @@ public class NodeProbe
ssProxy.resetLocalSchema();
}
+ public void failed()
+ {
+ failed = true;
+ }
+
public boolean isFailed()
{
return failed;