This is an automated email from the ASF dual-hosted git repository. dsmiley pushed a commit to branch branch_10x in repository https://gitbox.apache.org/repos/asf/solr.git
commit 3c900f1adb34f0b7d9b1bf683a308b7f91479056 Author: Eric Pugh <[email protected]> AuthorDate: Fri May 8 17:42:37 2026 -0400 SOLR-16458: Bugfix that we don't want to assume everything is a string. (#4330) (cherry picked from commit e452e5cd7c2faf7a91ab0df338b4cc245b63efa4) --- .../solr/client/api/model/NodeSystemResponse.java | 2 +- .../solr/handler/admin/SystemInfoProvider.java | 6 +-- .../handler/admin/SystemInfoProviderUnitTest.java | 54 ++++++++++++++++++++++ 3 files changed, 58 insertions(+), 4 deletions(-) diff --git a/solr/api/src/java/org/apache/solr/client/api/model/NodeSystemResponse.java b/solr/api/src/java/org/apache/solr/client/api/model/NodeSystemResponse.java index 024f53cdffc..8cf96afa912 100644 --- a/solr/api/src/java/org/apache/solr/client/api/model/NodeSystemResponse.java +++ b/solr/api/src/java/org/apache/solr/client/api/model/NodeSystemResponse.java @@ -48,7 +48,7 @@ public class NodeSystemResponse extends SolrJerseyResponse { @JsonProperty public JVM jvm; @JsonProperty public Security security; @JsonProperty public GPU gpu; - @JsonProperty public Map<String, String> system; + @JsonProperty public Map<String, Object> system; /** /node/system/security */ public static class Security { diff --git a/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoProvider.java b/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoProvider.java index 03e7df5c4b0..1af8b9a9c61 100644 --- a/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoProvider.java +++ b/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoProvider.java @@ -180,8 +180,8 @@ public class SystemInfoProvider { } /** Get system info */ - public Map<String, String> getSystemInfo() { - Map<String, String> info = new HashMap<>(); + public Map<String, Object> getSystemInfo() { + Map<String, Object> info = new HashMap<>(); OperatingSystemMXBean os = ManagementFactory.getOperatingSystemMXBean(); info.put(NAME, os.getName()); // add at least this one @@ -193,7 +193,7 @@ public class SystemInfoProvider { MetricUtils.OS_MXBEAN_CLASSES, (name, value) -> { if (info.get(name) == null) { - info.put(name, String.valueOf(value)); + info.put(name, value); } }); diff --git a/solr/core/src/test/org/apache/solr/handler/admin/SystemInfoProviderUnitTest.java b/solr/core/src/test/org/apache/solr/handler/admin/SystemInfoProviderUnitTest.java new file mode 100644 index 00000000000..f241c40974a --- /dev/null +++ b/solr/core/src/test/org/apache/solr/handler/admin/SystemInfoProviderUnitTest.java @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.solr.handler.admin; + +import static org.apache.solr.SolrTestCaseJ4.assumeWorkingMockito; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.Map; +import org.apache.solr.SolrTestCase; +import org.apache.solr.common.params.ModifiableSolrParams; +import org.apache.solr.request.SolrQueryRequest; +import org.junit.BeforeClass; +import org.junit.Test; + +/** Pure unit tests for {@link SystemInfoProvider}. */ +public class SystemInfoProviderUnitTest extends SolrTestCase { + + @BeforeClass + public static void ensureWorkingMockito() { + assumeWorkingMockito(); + } + + @Test + public void testNumericOsMetricsArePreservedAsNumbers() { + SolrQueryRequest req = mock(SolrQueryRequest.class); + when(req.getParams()).thenReturn(new ModifiableSolrParams()); + when(req.getCoreContainer()).thenReturn(null); + + Map<String, Object> info = new SystemInfoProvider(req).getSystemInfo(); + + // The Admin UI calls .toFixed(2) on systemLoadAverage — must be a Number, not a String. + Object loadAvg = info.get("systemLoadAverage"); + if (loadAvg != null) { + assertTrue( + "systemLoadAverage must be a Number, got " + loadAvg.getClass(), + loadAvg instanceof Number); + } + } +}
