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] [Commented] (CASSANDRA-16938) Missed wait latencies in the output of `nodetool tpstats -F`
Date Thu, 09 Sep 2021 16:37:00 GMT

    [ https://issues.apache.org/jira/browse/CASSANDRA-16938?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17412686#comment-17412686
] 

Andres de la Peña commented on CASSANDRA-16938:
-----------------------------------------------

{quote}
I don't see how it matters in a serialized format like json. If people are trying to read
it themselves and specifically chose json output to do so...well, this is still valid json,
heh.
{quote}
I agree, the new rearranged json is equivalent to the previous one and any parser should produce
the same output as before. 

By the way, at some point we should probably try to get rid of other usages of the venerable
{{json-simple}}. We are using version 1.1 which was released in 2009. The only newer version
is 1.1.1, which is from 2012 and doesn't solve the bug with numeric arrays.

> 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
>            Priority: Normal
>             Fix For: 4.1, 4.0.x
>
>         Attachments: json-after.txt, json-before.txt
>
>
> The output of {{nodetool tpstats -F json}} always prints an empty map for {{WaitLatencies}}:
> {code:java}
> $ nodetool tpstats -F json
> (...)"WaitLatencies":{},(...)
> {code}
> The same happens with yaml output:
> {code:java}
> $ 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:java}
> String[] strValues = (String[]) Arrays.stream(probe.metricPercentilesAsArray(probe.getMessagingQueueWaitMetrics(entry.getKey())))
>                                       .map(D -> D.toString())
>                                       .toArray();
> {code}
> When we would need something like:
> {code:java}
> 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.
My guess is that the 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:java}
> $ 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