[ https://issues.apache.org/jira/browse/CASSANDRA-8839?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14365447#comment-14365447 ]
Ariel Weisberg commented on CASSANDRA-8839: ------------------------------------------- -Djava.net.preferIPv4Stack is all or nothing and I think we should provide mechanism not policy. When I just tested it matters whether you select IPv4 or IPv6 addresses for an interface and there is no transparent automatic routing of incoming connections between them. I just don't want to end up in a scenario where people go to deploy in networking environments they don't have complete control over and they can't make it work without unnecessary platform specific friction. It's not a lot of code to implement preferring the ipv6 vs ipv4 stack for rpc and listen interface. I am still open to not adding the config it's just not my preference. The change in behavior would then be that when we are provided with an interface we bind to the first addressed provided by the JVM in the enumeration and ignore the others. > DatabaseDescriptor throws NPE when rpc_interface is used > -------------------------------------------------------- > > Key: CASSANDRA-8839 > URL: https://issues.apache.org/jira/browse/CASSANDRA-8839 > Project: Cassandra > Issue Type: Bug > Components: Config > Environment: 2.1.3 > Reporter: Jan Kesten > Assignee: Ariel Weisberg > Fix For: 2.1.4 > > > Copy from mail to dev mailinglist. > When using > - listen_interface instead of listen_address > - rpc_interface instead of rpc_address > starting 2.1.3 throws an NPE: > {code} > ERROR [main] 2015-02-20 07:50:09,661 DatabaseDescriptor.java:144 - Fatal > error during configuration loading > java.lang.NullPointerException: null > at > org.apache.cassandra.config.DatabaseDescriptor.applyConfig(DatabaseDescriptor.java:411) > ~[apache-cassandra-2.1.3.jar:2.1.3] > at > org.apache.cassandra.config.DatabaseDescriptor.<clinit>(DatabaseDescriptor.java:133) > ~[apache-cassandra-2.1.3.jar:2.1.3] > at > org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:110) > [apache-cassandra-2.1.3.jar:2.1.3] > at > org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:465) > [apache-cassandra-2.1.3.jar:2.1.3] > at > org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:554) > [apache-cassandra-2.1.3.jar:2.1.3] > {code} > Occurs on debian package as well as in tar.gz distribution. > {code} > /* Local IP, hostname or interface to bind RPC server to */ > if(conf.rpc_address !=null&& conf.rpc_interface !=null) > { > throw newConfigurationException("Set rpc_address OR rpc_interface, not > both"); > } > else if(conf.rpc_address !=null) > { > try > { > rpcAddress = InetAddress.getByName(conf.rpc_address); > } > catch(UnknownHostException e) > { > throw newConfigurationException("Unknown host in rpc_address "+ > conf.rpc_address); > } > } > else if(conf.rpc_interface !=null) > { > listenAddress = > getNetworkInterfaceAddress(conf.rpc_interface,"rpc_interface"); > } > else > { > rpcAddress = FBUtilities.getLocalAddress(); > } > {code} > I think that listenAddress in the second else block is an error. In my case > rpc_interface is eth0, so listenAddress gets set, and rpcAddress remains > unset. The result is NPE in line 411: > {code} > if(rpcAddress.isAnyLocalAddress()) > {code} > After changing rpc_interface to rpc_address everything works as expected. -- This message was sent by Atlassian JIRA (v6.3.4#6332)