You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Stefan Miklosovic (Jira)" <ji...@apache.org> on 2022/11/29 17:13:00 UTC

[jira] [Updated] (CASSANDRA-18079) Log better message when nodetool commands can not get probe.getOwnershipWithPort()

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

Stefan Miklosovic updated CASSANDRA-18079:
------------------------------------------
    Component/s: Legacy/Tools

> 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
>
> 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: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org