[ 
https://issues.apache.org/jira/browse/CASSANDRA-18079?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Stefan Miklosovic updated CASSANDRA-18079:
------------------------------------------
    Labels: lhf nodetool  (was: nodetool)

> 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: lhf, nodetool
>
> When status, ring or describecluster nodetool commands are executed while a 
> 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: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to