cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andres de la Peña (Jira) <j...@apache.org>
Subject [jira] [Created] (CASSANDRA-16938) Missed wait latencies in the output of `nodetool tpstats -F`
Date Thu, 09 Sep 2021 14:54:00 GMT
Andres de la Peña created CASSANDRA-16938:
---------------------------------------------

             Summary: Missed wait latencies in the output of `nodetool tpstats -F`
                 Key: CASSANDRA-16938
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-16938
             Project: Cassandra
          Issue Type: Bug
          Components: Tool/nodetool
            Reporter: Andres de la Peña
            Assignee: Andres de la Peña


The output of {{nodetool tpstats -F json}} always prints an empty map for {{WaitLatencies}}:
{code}
$ nodetool tpstats -F json
..."WaitLatencies":{},...
{code}
The same happens with yaml output:
{code}
$ nodetool tpstats -F yaml
...
WaitLatencies: {}
...
{code}
This happens because [this cast|https://github.com/apache/cassandra/blob/cassandra-4.0.1/src/java/org/apache/cassandra/tools/nodetool/stats/TpStatsHolder.java#L61-L63]
silently fails inside a try-catch with an empty catch block:
{code}
String[] strValues = (String[]) Arrays.stream(probe.metricPercentilesAsArray(probe.getMessagingQueueWaitMetrics(entry.getKey())))
                                      .map(D -> D.toString())
                                      .toArray();
{code}
When we would need something like:
{code}
String[] strValues = Arrays.stream(probe.metricPercentilesAsArray(probe.getMessagingQueueWaitMetrics(entry.getKey())))
                           .map(Object::toString)
                           .toArray(String[]::new);
{code}
This conversion from {{Double[]}} to {{String[]}} was introduced during CASSANDRA-16230. I
think that conversion was done trying to work around a malformed JSON output detected in [the
new tests|https://github.com/apache/cassandra/blob/cassandra-4.0.1/test/unit/org/apache/cassandra/tools/NodeToolTPStatsTest.java#L158]
added by that ticket. Without the conversion the output would be something like:
{code}
$ nodetool tpstats -F json
..."WaitLatencies":{"READ_RSP":[Ljava.lang.Double;@398dada8,...
{code}
That's because {{json-simple}} doesn't handle well arrays. I think that instead of converting
the array of doubles to an array of strings we can simply use {{jackson-mapper-asl}} to print
the proper array.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org


Mime
View raw message