[
https://issues.apache.org/jira/browse/CASSANDRA-18079?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Stefan Miklosovic updated CASSANDRA-18079:
------------------------------------------
Labels: nodetool (was: )
> Log better message when nodetool commands can not get
> probe.getOwnershipWithPort()
> ----------------------------------------------------------------------------------
>
> Key: CASSANDRA-18079
> URL: https://issues.apache.org/jira/browse/CASSANDRA-18079
> Project: Cassandra
> Issue Type: Improvement
> Components: Legacy/Tools
> Reporter: Stefan Miklosovic
> Priority: Normal
> Labels: nodetool
>
> When status, ring or describecluster odetool commands are executed while node
> which is queried is not fully bootstrapped / started, it can throw this
> exception:
> {code:java}
> cassandra_node_4 | error: No nodes present in the cluster. Has this node
> finished starting up?
> cassandra_node_4 | -- StackTrace --
> cassandra_node_4 | java.lang.RuntimeException: No nodes present in the
> cluster. Has this node finished starting up?
> cassandra_node_4 | at
> org.apache.cassandra.dht.Murmur3Partitioner.describeOwnership(Murmur3Partitioner.java:303)
> cassandra_node_4 | at
> org.apache.cassandra.service.StorageService.getOwnershipWithPort(StorageService.java:5751)
> cassandra_node_4 | at
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> cassandra_node_4 | at
> java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> cassandra_node_4 | at
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> cassandra_node_4 | at
> java.base/java.lang.reflect.Method.invoke(Method.java:566)
> cassandra_node_4 | at
> sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
> cassandra_node_4 | at
> jdk.internal.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
> cassandra_node_4 | at
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> cassandra_node_4 | at
> java.base/java.lang.reflect.Method.invoke(Method.java:566)
> cassandra_node_4 | at
> java.base/sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:260)
> cassandra_node_4 | at
> java.management/com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:112)
> cassandra_node_4 | at
> java.management/com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:46)
> cassandra_node_4 | at
> java.management/com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:237)
> cassandra_node_4 | at
> java.management/com.sun.jmx.mbeanserver.PerInterface.getAttribute(PerInterface.java:83)
> cassandra_node_4 | at
> java.management/com.sun.jmx.mbeanserver.MBeanSupport.getAttribute(MBeanSupport.java:206)
> cassandra_node_4 | at
> java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:641)
> cassandra_node_4 | at
> java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:678)
> cassandra_node_4 | at
> java.management/com.sun.jmx.remote.security.MBeanServerAccessController.getAttribute(MBeanServerAccessController.java:320)
> cassandra_node_4 | at
> java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1443)
> cassandra_node_4 | at
> java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1307)
> cassandra_node_4 | at
> java.base/java.security.AccessController.doPrivileged(Native Method)
> cassandra_node_4 | at
> java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1406)
> cassandra_node_4 | at
> java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.getAttribute(RMIConnectionImpl.java:637)
> cassandra_node_4 | at
> java.base/jdk.internal.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
> cassandra_node_4 | at
> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> cassandra_node_4 | at
> java.base/java.lang.reflect.Method.invoke(Method.java:566)
> cassandra_node_4 | at
> java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:359)
> cassandra_node_4 | at
> java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
> cassandra_node_4 | at
> java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
> cassandra_node_4 | at
> java.base/java.security.AccessController.doPrivileged(Native Method)
> cassandra_node_4 | at
> java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
> cassandra_node_4 | at
> java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:562)
> cassandra_node_4 | at
> java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:796)
> cassandra_node_4 | at
> java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:677)
> cassandra_node_4 | at
> java.base/java.security.AccessController.doPrivileged(Native Method)
> cassandra_node_4 | at
> java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:676)
> cassandra_node_4 | at
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
> cassandra_node_4 | at
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
> cassandra_node_4 | at java.base/java.lang.Thread.run(Thread.java:829)
> {code}
> The message as such is ok, it is more about the way we inform a user. There
> should not be stacktrace visible. Why it should? As a user I am not
> interested in that. All I want to see is one-liner about what happened.
> In the code, for example for "status", look at this (1). When line 77 fails,
> it will go to the catch block and there is probe.getOwnershipWithPort()
> called. However, when that one fails (as shown above), that exception
> propagates to nodetool which will eventually log it with stacktrace as well.
> We should wrap this one more time and write exception message only and
> exit(1).
> (1)
> [https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/tools/nodetool/Status.java#L75-L89]
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]