From e3a0b428fd7dd8747a6b48ef165300ebb23b3198 Mon Sep 17 00:00:00 2001 From: Andrzej Bialecki Date: Mon, 13 Mar 2017 20:29:22 +0100 Subject: [PATCH] SOLR-10269 MetricHandler JSON output was incorrect. --- solr/CHANGES.txt | 2 ++ .../java/org/apache/solr/util/stats/MetricUtils.java | 7 ++++--- .../apache/solr/handler/admin/MetricsHandlerTest.java | 11 +++++++---- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt index 1469d3e4da5..63424ddbd70 100644 --- a/solr/CHANGES.txt +++ b/solr/CHANGES.txt @@ -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 ---------------------- diff --git a/solr/core/src/java/org/apache/solr/util/stats/MetricUtils.java b/solr/core/src/java/org/apache/solr/util/stats/MetricUtils.java index 5a7c680494a..70fd4674c9e 100644 --- a/solr/core/src/java/org/apache/solr/util/stats/MetricUtils.java +++ b/solr/core/src/java/org/apache/solr/util/stats/MetricUtils.java @@ -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 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; } diff --git a/solr/core/src/test/org/apache/solr/handler/admin/MetricsHandlerTest.java b/solr/core/src/test/org/apache/solr/handler/admin/MetricsHandlerTest.java index a1b29dba8e4..2fd7e9ca7b5 100644 --- a/solr/core/src/test/org/apache/solr/handler/admin/MetricsHandlerTest.java +++ b/solr/core/src/test/org/apache/solr/handler/admin/MetricsHandlerTest.java @@ -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);