SOLR-10269 MetricHandler JSON output was incorrect.

This commit is contained in:
Andrzej Bialecki 2017-03-13 20:29:22 +01:00
parent c8bad8c10a
commit e3a0b428fd
3 changed files with 13 additions and 7 deletions

View File

@ -235,6 +235,8 @@ Bug Fixes
* SOLR-9838: "inc" atomic update doesn't respect default field value (hoss, Amrit Sarkar, Ishan Chattopadhyaya)
* SOLR-10269: MetricsHandler JSON output incorrect. (ab)
Optimizations
----------------------

View File

@ -38,6 +38,7 @@ import com.codahale.metrics.Snapshot;
import com.codahale.metrics.Timer;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.metrics.AggregateMetric;
/**
@ -117,12 +118,12 @@ public class MetricUtils {
MetricFilter mustMatchFilter, boolean skipHistograms,
boolean skipAggregateValues,
Map<String, Object> metadata) {
NamedList result = new NamedList();
NamedList result = new SimpleOrderedMap();
toNamedMaps(registry, shouldMatchFilters, mustMatchFilter, skipHistograms, skipAggregateValues, (k, v) -> {
result.add(k, new NamedList(v));
result.add(k, v);
});
if (metadata != null && !metadata.isEmpty()) {
result.add("_metadata_", new NamedList(metadata));
result.add("_metadata_", metadata);
}
return result;
}

View File

@ -17,6 +17,8 @@
package org.apache.solr.handler.admin;
import java.util.Map;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.util.NamedList;
@ -48,13 +50,14 @@ public class MetricsHandlerTest extends SolrTestCaseJ4 {
NamedList nl = (NamedList) values.get("solr.core.collection1");
assertNotNull(nl);
assertNotNull(nl.get("SEARCHER.new.errors")); // counter type
assertNotNull(((NamedList) nl.get("SEARCHER.new.errors")).get("count"));
assertEquals(0L, ((NamedList) nl.get("SEARCHER.new.errors")).get("count"));
assertNotNull(((Map) nl.get("SEARCHER.new.errors")).get("count"));
// response wasn't serialized so we get here whatever MetricUtils produced instead of NamedList
assertEquals(0L, ((Map) nl.get("SEARCHER.new.errors")).get("count"));
nl = (NamedList) values.get("solr.node");
assertNotNull(nl.get("CONTAINER.cores.loaded")); // int gauge
assertEquals(1, ((NamedList) nl.get("CONTAINER.cores.loaded")).get("value"));
assertEquals(1, ((Map) nl.get("CONTAINER.cores.loaded")).get("value"));
assertNotNull(nl.get("ADMIN./admin/authorization.clientErrors")); // timer type
assertEquals(5, ((NamedList) nl.get("ADMIN./admin/authorization.clientErrors")).size());
assertEquals(5, ((Map) nl.get("ADMIN./admin/authorization.clientErrors")).size());
resp = new SolrQueryResponse();
handler.handleRequestBody(req(CommonParams.QT, "/admin/metrics", CommonParams.WT, "json", "group", "jvm,jetty"), resp);