You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sn...@apache.org on 2015/01/27 13:38:28 UTC

[2/3] cassandra git commit: rpc_interface and listen_interface generate NPE on startup when specified interface doesn't exist

rpc_interface and listen_interface generate NPE on startup when specified interface doesn't exist

Patch by Ariel Weisberg; reviewed by Robert Stupp for CASSANDRA-8677


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/3e5edb82
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/3e5edb82
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/3e5edb82

Branch: refs/heads/trunk
Commit: 3e5edb82c73b7b7c6e1d1e970fb764c3e3158da6
Parents: 33297ba
Author: Ariel Weisberg <ar...@datastax.com>
Authored: Tue Jan 27 13:30:47 2015 +0100
Committer: Robert Stupp <sn...@snazy.de>
Committed: Tue Jan 27 13:30:47 2015 +0100

----------------------------------------------------------------------
 .../cassandra/config/DatabaseDescriptor.java    | 46 ++++++++++----------
 1 file changed, 23 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/3e5edb82/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
index db33dcc..1dd1688 100644
--- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
+++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
@@ -158,6 +158,27 @@ public class DatabaseDescriptor
         return loader.loadConfig();
     }
 
+    private static InetAddress getNetworkInterfaceAddress(String intf, String configName) throws ConfigurationException
+    {
+        try
+        {
+            NetworkInterface ni = NetworkInterface.getByName(intf);
+            if (ni == null)
+                throw new ConfigurationException("Configured " + configName + " \"" + intf + "\" could not be found");
+            Enumeration<InetAddress> addrs = ni.getInetAddresses();
+            if (!addrs.hasMoreElements())
+                throw new ConfigurationException("Configured " + configName + " \"" + intf + "\" was found, but had no addresses");
+            InetAddress retval = listenAddress = addrs.nextElement();
+            if (addrs.hasMoreElements())
+                throw new ConfigurationException("Configured " + configName + " \"" + intf + "\" can't have more than one address");
+            return retval;
+        }
+        catch (SocketException e)
+        {
+            throw new ConfigurationException("Configured " + configName + " \"" + intf + "\" caused an exception", e);
+        }
+    }
+
     private static void applyConfig(Config config) throws ConfigurationException
     {
         conf = config;
@@ -326,18 +347,7 @@ public class DatabaseDescriptor
         }
         else if (conf.listen_interface != null)
         {
-            try
-            {
-                Enumeration<InetAddress> addrs = NetworkInterface.getByName(conf.listen_interface).getInetAddresses();
-                listenAddress = addrs.nextElement();
-                if (addrs.hasMoreElements())
-                    throw new ConfigurationException("Interface " + conf.listen_interface +" can't have more than one address");
-            }
-            catch (SocketException e)
-            {
-                throw new ConfigurationException("Unknown network interface in listen_interface " + conf.listen_interface);
-            }
-
+            listenAddress = getNetworkInterfaceAddress(conf.listen_interface, "listen_interface");
         }
 
         /* Gossip Address to broadcast */
@@ -374,17 +384,7 @@ public class DatabaseDescriptor
         }
         else if (conf.rpc_interface != null)
         {
-            try
-            {
-                Enumeration<InetAddress> addrs = NetworkInterface.getByName(conf.rpc_interface).getInetAddresses();
-                rpcAddress = addrs.nextElement();
-                if (addrs.hasMoreElements())
-                    throw new ConfigurationException("Interface " + conf.rpc_interface +" can't have more than one address");
-            }
-            catch (SocketException e)
-            {
-                throw new ConfigurationException("Unknown network interface in rpc_interface " + conf.rpc_interface);
-            }
+            listenAddress = getNetworkInterfaceAddress(conf.rpc_interface, "rpc_interface");
         }
         else
         {