You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@lucene.apache.org by "David Smiley (Jira)" <ji...@apache.org> on 2021/01/07 16:10:00 UTC
[jira] [Commented] (SOLR-15074) ClassCastException when repeating
the same query param twice in Prometheus exporter config file
[ https://issues.apache.org/jira/browse/SOLR-15074?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17260607#comment-17260607 ]
David Smiley commented on SOLR-15074:
-------------------------------------
It's not clear why NamedList.toSolrParams wasn't used. Less code too. The return value isn't a ModifiableSolrParams specifically but you can call ModifiableSolrParams.of(...).
> ClassCastException when repeating the same query param twice in Prometheus exporter config file
> -----------------------------------------------------------------------------------------------
>
> Key: SOLR-15074
> URL: https://issues.apache.org/jira/browse/SOLR-15074
> Project: Solr
> Issue Type: Bug
> Security Level: Public(Default Security Level. Issues are Public)
> Components: contrib - prometheus-exporter
> Affects Versions: 8.6.2
> Reporter: Mathieu Marie
> Priority: Minor
>
> I am using the prometheus-exporter to monitor my service, and I wish to scale down the amount of data exchanged between solr and prometheus.
> I can do that by updating the queries in the solr-exporter.xml file.
> I wanted to use a query that look like :
> {noformat}
> http://localhost:8983/solr/admin/metrics?group=solr.node®ex=.*metrics.*requestTimes&property=p95_ms&property=count
> {
> "responseHeader":{
> "status":0,
> "QTime":1},
> "metrics":{
> "solr.node":{
> "ADMIN./admin/metrics.distrib.requestTimes":{
> "count":0,
> "p95_ms":0.0},
> "ADMIN./admin/metrics.local.requestTimes":{
> "count":238,
> "p95_ms":1.984835},
> "ADMIN./admin/metrics.requestTimes":{
> "count":238,
> "p95_ms":1.995053},
> "QUERY./admin/metrics/collector.distrib.requestTimes":{
> "count":0,
> "p95_ms":0.0},
> "QUERY./admin/metrics/collector.local.requestTimes":{
> "count":0,
> "p95_ms":0.0},
> "QUERY./admin/metrics/collector.requestTimes":{
> "count":0,
> "p95_ms":0.0},
> "QUERY./admin/metrics/history.distrib.requestTimes":{
> "count":0,
> "p95_ms":0.0},
> "QUERY./admin/metrics/history.local.requestTimes":{
> "count":0,
> "p95_ms":0.0},
> "QUERY./admin/metrics/history.requestTimes":{
> "count":0,
> "p95_ms":0.0}}}}
> {noformat}
> In that query I repeated the param property to provide two values:
> {{property=p95_ms&property=count}}
> My config file look like that :
> {noformat}
> <lst name="request">
> <lst name="query">
> <str name="path">/admin/metrics</str>
> <lst name="params">
> <str name="group">solr.core</str>
> <str name="regex">.*metrics.*requestTimes</str>
> <str name="property">count</str>
> <str name="property">p95_ms</str>
> </lst>
> </lst>
> ...
> </lst>
> {noformat}
>
> Then when the prometheus-exporter starts, it produces a ClassCastException.
> {noformat}
> Exception in thread "main" java.lang.RuntimeException: java.lang.ClassCastException: class java.util.ArrayList cannot be cast to class java.lang.String (java.util.ArrayList and java.lang.String are in module java.base of loader 'bootstrap')
> at org.apache.solr.prometheus.exporter.SolrExporter.loadMetricsConfiguration(SolrExporter.java:231)
> at org.apache.solr.prometheus.exporter.SolrExporter.main(SolrExporter.java:213)
> Caused by: java.lang.ClassCastException: class java.util.ArrayList cannot be cast to class java.lang.String (java.util.ArrayList and java.lang.String are in module java.base of loader 'bootstrap')
> at org.apache.solr.prometheus.exporter.MetricsQuery.from(MetricsQuery.java:109)
> at org.apache.solr.prometheus.exporter.MetricsConfiguration.toMetricQueries(MetricsConfiguration.java:91)
> at org.apache.solr.prometheus.exporter.MetricsConfiguration.from(MetricsConfiguration.java:80)
> at org.apache.solr.prometheus.exporter.SolrExporter.loadMetricsConfiguration(SolrExporter.java:228)
> ... 1 more
> {noformat}
>
> This comes from a bad casting (obviously) in that code:
> {noformat}
> NamedList query = (NamedList) request.get("query");
> NamedList queryParameters = (NamedList) query.get("params");
> String path = (String) query.get("path");
> String core = (String) query.get("core");
> String collection = (String) query.get("collection");
> List<String> jsonQueries = (ArrayList<String>) request.get("jsonQueries");
> ModifiableSolrParams params = new ModifiableSolrParams();
> if (queryParameters != null) {
> for (Map.Entry<String, String> entrySet : (Set<Map.Entry<String, String>>) queryParameters.asShallowMap().entrySet()) {
> params.add(entrySet.getKey(), entrySet.getValue());
> }
> }
> {noformat}
>
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@lucene.apache.org
For additional commands, e-mail: issues-help@lucene.apache.org